问题描述
我正在尝试在以下位置插入新项目。关键是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可以正常工作,但不能切片或拼接?如果这些方法不起作用,该如何以其他方式将该项目推到想要的位置?
解决方法
假设我正确理解了您要执行的操作,则有两种选择:
- 在
getItems
内,创建一个新数组,修改新数组以插入值,然后返回新数组。 - 在
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))
。