我有以下JSON:
var json = [
{
"id": "1",
"key1": "Name1",
"key2": 2,
"key3": 1
},
{
"id": "2",
"key1": "Name2",
"key2": 2,
"key3": 1
},
{
"id": "3",
"key1": "Name3",
"key2": 2,
"key3": 1
}
]
我需要用另一个对象替换一个对象。 例如,我想替换:
{
"id": "2",
"key1": "Name2",
"key2": 2,
"key3": 1
}
与
{
"id": "5",
"key1": "Name7",
"key2": 3,
"key3": 2
}
到目前为止,我只能过滤对象数组:
var id = 2;
var newObj = {"id": "5", "key1": "Name7", "key2": 3, "key3": 2};
var filtered = json.filter(function(el) {
return el.id === id;
});
console.log(filtered);
下一步是什么?如何使用id === 2
替换newObj
的对象?
答案 0 :(得分:2)
您可以使用方法Array.prototype.findIndex():
var id = "2"; // ids are strings in your json object
var newObj = {"id": "5", "key1": "Name7", "key2": 3, "key3": 2};
var idx = json.findIndex(function(el) {
return el.id === id;
});
if (~idx) { // the same as `idx > -1`
json[idx] = newObj;
}
但是,所有浏览器都不支持findIndex
,因此请在MDN上检查环境中的兼容性。
您可以使用跨浏览器解决方案,并将findIndex
替换为reduce
:
var idx = json.reduce(function(r, el, i) {
return !~r && el.id === id ? i : r;
}, -1);
答案 1 :(得分:0)
===
表示"没有类型强制的等式",所以你可以将数字转换为字符串,
var id = 2; //id a number, but json[i].id is string
var newObj = {"id": "5", "key1": "Name7", "key2": 3, "key3": 2};
var filtered = json.filter(function(el) {
return el.id === String(id); // or id.toString() and id + ''
});
console.log(filtered);