Javascript 如何使用for循环修改对象键更具声明性?
我想搜索现有对象并修改其属性。 这非常有效:Javascript 如何使用for循环修改对象键更具声明性?,javascript,Javascript,我想搜索现有对象并修改其属性。 这非常有效: function changeObjectKey(targetObject) { for(var i = 0; i < listofobjects.length; i++) { if(targetobject.keyone == listofobjects[i].keyone) listofobjects[i].keytwo = 'changedvalue';
function changeObjectKey(targetObject) {
for(var i = 0; i < listofobjects.length; i++) {
if(targetobject.keyone == listofobjects[i].keyone)
listofobjects[i].keytwo = 'changedvalue';
break;
}
}
}
}
注意:过滤器中只有一个对象匹配。
尽管后者并没有改变对象列表。。。但我想买一份。而在第一种情况下,原始ListoObjects[i].keytwo正在更改
正确的方法是什么?只需使用第一个
[0]
:
let filteredobject = listofobjects.filter(function(currentobject) {
return (currentobject.keyone == targetobject.keyone);
})[0];
filteredobject.keytwo = 'changedvalue';
我想
map
更适合这个。当然,您可以在过滤器
之后链接映射
而且,我没有改变原始对象。如果那是你想做的事情,你可以做。但通常,您不会使用这些函数(map
、filter
、reduce
)来改变数据
function changeObjectKey(targetObject) {
return listofobjects.map(function (obj) {
if (obj.keyone !== targetobject.keyone) {
return obj;
}
return Object.assign({}, obj, {
keytwo = 'changedvalue'
})
})
}
我认为map()方法更好
map()方法创建一个新数组,其结果是对该数组中的每个元素调用提供的函数
结果是相同的数组,但现在tarjetobjec的keytwo已更改其值
function changeObjectKey(targetObject) {
return listofobjects.map(function (obj) {
if (obj.keyone !== targetobject.keyone) {
return obj;
}
return Object.assign({}, obj, {
keytwo = 'changedvalue'
})
})
}
listofobjects = listofobjects.map(function(currentobject) {
if(currentobject.keyone === targetobject.keyone){
currentobject.keytwo = "changed value";
}
});