阵列拼接无法在这种方法中工作,这是怎么回事?

问题描述

我正在尝试在以下位置插入新项目。关键是concat()可以正常工作,但是当我使用slice或splice时却不能。甚至不显示任何错误,只是显示空白屏幕。

 getItems() {
      const item2 = {
        name: '...',description: '...',id: '...',}
      let items = { ...this.items }
      
        return Object.keys(items)
          .map(id => ({
            ...items[id],id,}))
          .splice(2,item2)
      ...
}

这是它的样子。为什么concat可以正常工作,但不能切片或拼接?如果这些方法不起作用,该如何以其他方式将该项目推到想要的位置?

解决方法

假设我正确理解了您要执行的操作,则有两种选择:

  1. getItems内,创建一个新数组,修改新数组以插入值,然后返回新数组。
  2. getItems内,在一行中声明一个新数组,然后将其返回。

选项1的示例

getItems() {
  const item2 = {
    name: '...',description: '...',id: '...',}

  let items = { ...this.items }
      
  const resultArray = Object.keys(items)
    .map(id => ({
      ...items[id],id,}))

  resultArray.splice(2,item2) // This does **not** return the right value,it only modifies resultArray to become the value you want.
  return resultArray // Instead we return resultArray on a new line.
}

对于选项2:

getItems() {
  const item2 = {
    name: '...',}))

  return [ ...resultArray.slice(0,2),item2,...resultArray.slice(2) ]
}

要回答有关concat()为什么起作用但不能slice()splice()起作用的问题:concat()返回一个新数组,其中添加了元素。 slice()不能用于添加项目的数组。 splice()同时执行两项操作:修改数组以删除或插入项目, 返回一个仅包含已删除内容的新数组。

第二个示例与使用concat()解决该问题非常相似:它等效于return [].concat(resultArray.slice(0,[item2],resultArray.slice(2))