有了一个物体,我可以克隆&添加如下:
let newObject = {
...obj,
[key]: {
...obj[key],
thing: true }
}
因此,这会向数组添加一些对象,然后更新一个对象的属性。 我知道要更新的项目索引,但不想覆盖现有属性。
现在我想对数组做同样的事情:
let newArray = [
...arr,
[key]: {
...arr[key],
thing: true }
]
可能与上述相同。
但这不起作用。
{key}:thing
应该有效吗?我记得在某个地方读过这篇文章,也许是ES7?
我能做到:
let newArray = arr.map((item, key) => key === index ? { ...item, thing: true } : item);
但我希望语法更清晰。如果没有类似的语法,我会接受否。
答案 0 :(得分:1)
您可以使用Object.assign()
:
const arr = [{ a: 1 }, { b: 1 }, { c: 1 }];
const index = 1;
const newArr = Object.assign([], arr, { [index]: { ...arr[index], thing: true } });
console.log(newArr);
答案 1 :(得分:0)
阵列没有密钥,因此您使用的语法不起作用。它是一个对象数组吗?如果是的话......
编辑 - 根据您的评论,试试这个:
// if you know the index of the object you'd like to modify
let newArray = [
...arr
]
newArray[idx][key] = thing
// if you don't know the index
let newArray = [
...arr
]
newArray.map((el) => {
if (/* YOUR LOGIC HERE TO DETERMINE IF THIS IS THE OBJECT TO MODIFY! */) {
return el[key] = thing
} else {
return el
}
})
// if you want it done in one function...
let newArray = []
arr.map((el) => {
if (el[key]) {
newArray.push(Object.assign({}, { [key]: thing }))
return el
} else {
newArray.push(Object.assign({}, el))
return el
}
})