使用循环更改对象的值

时间:2016-01-22 12:11:47

标签: javascript jquery

我有一个对象,

var obj = [ 
            {
              "name": "a",
              "value": "1"
            },
            {
              "name": "b",
              "value": "2"
            },
            {
              "name": "c",
              "value": "3"
            }
          ]

我有一个超过50个值的大对象。 如何使用value更改name密钥 什么是最好的循环技术。

我为此尝试了for loop

    for(i = 0; i < obj.length; i++) {
        if(obj[i].name == "b") {
            // some other functionality
            obj[i].value = "some_value";
        }
    }

但是,这需要很长时间,有时候for loop会在执行if condition之前进行下一轮。

请解释如何解决它或是否有其他循环技术

5 个答案:

答案 0 :(得分:0)

地图是你的朋友!

var obj = [ 
  { "name": "a", "value": "1" },
  { "name": "b", "value": "2" },
  { "name": "c", "value": "3" }
];

var newObj = obj.map((elm) => {
  if(elm.name === "b") elm.value = "some value";
  return elm;
});

这是你想要的吗?

答案 1 :(得分:0)

你可以使用forEach,但是至于你的表现并不是最好的,

你可以使用地图,但是与地图相比,原生的for循环也是最快的

https://jsperf.com/native-map-versus-array-looping

Map,在数组的每个项目上运行并返回新数组

obj.map(function(item){
  if(item.name === "b"){
      item.value = "some_value"
   }
 return item;
})

此外,Maps,filters,reduce是异步的,而forEach不是

答案 2 :(得分:0)

你可以试试这个:

&#13;
&#13;
$(document).ready(function(){

  var obj = [ 
    {
      "name": "a",
      "value": "1"
    },
    {
      "name": "b",
      "value": "2"
    },
    {
      "name": "c",
      "value": "3"
    }
  ]

  for(i = 0; i < obj.length; i++) {
    (function(i){
      if(obj[i].name === "b") {
        console.log(obj[i].name);
        // some other functionality
        obj[i].value = "some_value";
      }
    })(i);
  }
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我觉得你的确很好。正如其中一条评论所述,IF声明中存在一个错误,导致其无法被触发。

我不确定处理JSON对象的方式比你做的更快。这是一个JSFiddle,有一些小的变化。

function ReplaceValue(name, val) {
    for (i = 0; i < obj.length; i++) {
    if (obj[i].name == name) {
      // some other functionality
      obj[i].value = val;
      break;
    }
  }
    alert(JSON.stringify(obj, null, 2));
}

答案 4 :(得分:-1)

在lodash你可以这样做:

`

var obj = [ 
            {
              "name": "a",
              "value": "1"
            },
            {
              "name": "b",
              "value": "2"
            },
            {
              "name": "c",
              "value": "3"
            }
          ];        
 _.transform(arr, function(r, n){
   if(n.name == 'b'){
     r.push({name: n.name, value: 'some value'})}
   else{
     r.push(n)
   }
  })

`