2016-01-22 53 views
-3

改变对象的值我有一个对象为,使用循环

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

但是,这需要很长时间,有时执行if condition之前for loop无二下一回合。

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

+1

你不有一个对象,但它是一个对象数组 – Oxi

+1

首先你应该把'var'之前'我= 0'确保'i'不是全球性的。你也可以在块条件中添加一个'break',如果你没有其他值更改 – Hacketo

+3

_“,并且如果条件被执行,有时for循环会在下一个回合中执行。”_什么?你的代码是异步的吗? – Cerbrus

回答

0

可以使用的forEach,但就你的击球表现它不是最好的,

您可以使用地图,本地for循环速度最快的比较来映射太

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

地图,这运行在阵列的每个项目上并返回新阵列

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

此外,映射,过滤器,reduce是异步的,而fo REACH是不是

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

这是什么东西就像你在找什么?

+0

中的外部插件代码使用'obj.map(函数(elm)'而不是'obj.map((elm)'),那么只有它对我有用。 – Harish

+0

我在短箭头函数语法中遗漏了=>。我现在纠正了它。 –

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

`

0

你可以试试这个:

$(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); 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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