Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用for循环修改对象键更具声明性?_Javascript - Fatal编程技术网

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";
       }
  });