我有一个对象,
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
之前进行下一轮。
请解释如何解决它或是否有其他循环技术
答案 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)
你可以试试这个:
$(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;
答案 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)
}
})
`