更新对象数组中的值的更好方法

时间:2017-12-20 06:26:06

标签: javascript arrays json

在sessionStroage中,

  

key:qq

     

值:[{“javascript”:800},{“python”:600},{“html”:300}]

我会对其进行一些更改,例如,只需将python更改为1000(我不知道它在数组中的顺序)

模拟代码

// set storage
sessionStorage.setItem('qq', JSON.stringify([{'javascript': 800}, {'python': 600}, {'html': 300}]));

// get from storage
var ss =  JSON.parse(sessionStorage.getItem('qq'));

这是我尝试的

// for-loop to update value to 'python'
for (var i in ss) {
    if (Object.keys(ss[i])[0] === 'python'){
        ss[i][Object.keys(ss[i])[0]] = 1000;
    }
}

它有效,但它有点复杂而且不直观,有没有更好的方法呢?

任何意见都没问题,非常感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用Array#find

V

arr.find(obj => obj.hasOwnProperty('python')).python = 1000;

这将更新var arr = [{'javascript': 800}, {'python': 600}, {'html': 300}]; arr.find(obj => obj.hasOwnProperty('python')).python = 1000; console.log(arr);本身的值,然后可以将其转换为字符串并存储到sessionStorage中。

答案 1 :(得分:3)

您可以使用简单的ForEach方法实现此目的。 forEach()方法为每个数组元素执行一次提供的函数。

var ss = [{'javascript': 800}, {'python': 600}, {'html': 300}]
console.log("Before  "+JSON.stringify(ss))
ss.forEach(function(element) {
if(Object.keys(element) == 'python'){
     element['python'] = 1000;
   }
});
console.log("After "+JSON.stringify(ss))

答案 2 :(得分:2)

如果您的应用允许,您可以将值存储为object而不是Array,然后只需按键查找项目:

键:qq 价值:{" javascript":800," python":600," html":300}

将其从存储中取出并解析后,它将是:

var ss = JSON.parse(sessionStorage.getItem('qq'));

ss.python = 1000;