我有一个类似于以下对象的数组:
[
{
number: 1,
name: "A"
},
{
number: 2,
name: "e",
},
{
number: 3,
name: "EE",
}
]
我需要能够在特定位置将对象插入到数组中,但是随后我必须移动对象其余部分的所有数字,因此这些数字是按顺序排列的。 同样,我需要能够删除一个对象,但必须将所有数字移回去。
即如果我在名称为“ F”的位置1处插入,数组将变为:
[
{
number: 1,
name: "A"
},
{
number: 2,
name: "F"
},
{
number: 3,
name: "e",
},
{
number: 4,
name: "EE",
}
]
我知道有几种方法可以做到,但是没有一个看起来很漂亮。 在这里发表我的一些想法:
this.arr.splice(1, 0, newObj)
,然后尝试遍历this.arr,对于任何大于2的索引,我都做了++ number,这很有效,但是很丑。this.arr.splice(1, 0, newObj)
,然后用let newArr = this.arr.split(2)
拆分this.arr,然后是newArr.map(a => {...})
,并使用splice用newArr替换部分原始arr。新编辑: 在这里分享我的一些代码,这是可行的,但是我想简单地做一下,或者使其尽可能漂亮。请分享想法。
const newObj = {
number: obj.number + 1,
name: 'S',
}
this.arr.splice(obj.number, 0, newObj)
if (this.arr.length > obj.number) {
const remaining = this.arr.slice(obj.number + 1).map( (t) => ({...t, ...{number: t.number + 1}}))
this.arr.splice(newObj.number, remaining.length, ...remaining)
}
答案 0 :(得分:1)
要获得预期结果,请使用splice(index,deleteCount,item)并在map中使用index分配给每个对象的编号,以在您删除之后按顺序获取编号
let arr = [
{
number: 1,
name: "A"
},
{
number: 2,
name: "e",
},
{
number: 3,
name: "EE",
}
]
let newObj = {
name: "F",
}
arr.splice(1,0, newObj)//To add
// console.log(arr)
//arr.splice(2,1) //To delete
//console.log(arr);
console.log(arr.map((v,i) => {
v.number = i;
return v
}));
Array.splice的引用链接-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
答案 1 :(得分:0)
您可以使用...
扩展语法和分片。
operation
用于确定是否要删除或添加该值。operation
是del
,则比我们将第一个从0
切到索引,然后再从index+1
切到数组末尾。from 0 upto index
切成薄片并添加所需的值,然后再将其余部分相加(from index to end
)number
属性
let arr = [{ number: 1,name: "A"},{number: 2,name: "e", }, {number: 3,name: "EE",}]
let handleArray = (array,operation,index,value) => {
if(operation === 'del') {
return [...array.slice(0, index), ...array.slice(index+1,)].map((value,index)=> (value.number = index+1, value))
} else {
return [...array.slice(0,index),value,...array.slice(index,)].map((value,index)=> (value.number = index+1,value))
}
}
console.log(handleArray(arr,'add',0,{a:1}))
console.log(handleArray(arr,'del',0))