我想更改以下代码,我想将user_uuid插入数组中的每个对象中,但是我不想使用循环。
const test = [
{ n: 1, m: 2 },
{ n: 6, m: 2 },
{ n: 3, m: 4 }
];
const user_uuid = 3;
是否可以更改为
const test = [
{ n: 1, m: 2,user_uuid:3 },
{ n: 6, m: 2,user_uuid:3 },
{ n: 3, m: 4,user_uuid:3 }
];
答案 0 :(得分:4)
假设这些对象没有什么特别之处,¹不,没有 some 循环就无法做到这一点。
简单的直接方法是...一个实际的循环:
for (const entry of test) {
entry.user_uuid = 3;
}
或者有forEach
:
test.forEach(entry => {
entry.user_uuid = 3;
});
但是forEach
仍然是一个循环,该循环就在forEach
内,它在每次迭代时都调用您的回调。
类似地,您可以使用map
并使用属性扩展(ES2018 +)构建新对象和新数组:
test = test.map(entry => ({...entry, user_uuid: 3}));
...但这仍然是一个循环。
¹例外情况是:
您要更改的所有对象都共享同一原型,并且
您不想要更改的对象都没有该原型
在这种情况下,如果对象是特殊的,则可以通过将属性添加到原型中来实现:
Object.getPrototypeOf(test[0]).user_uuid = 3;
这实际上并没有将属性添加到对象中,并且如果您(例如)在这些对象上使用JSON.stringify
也不会包含该属性,但是执行test[1].user_uuid
会给您带来价值3
在这种特殊情况下。