Javascript 替换JSON中的键:值对

Javascript 替换JSON中的键:值对,javascript,json,Javascript,Json,我有以下JSON: var json = [ { "id": "1", "key1": "Name1", "key2": 2, "key3": 1 }, { "id": "2", "key1": "Name2", "key2": 2, "key3": 1 }, { "id": "3", "key1

我有以下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
}

到目前为止,我只能过滤对象数组:

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);
下一步是什么?如何用
newObj
替换id==2的对象?

您可以使用以下方法:

但是,并非所有浏览器都支持
findIndex
,因此请在上检查您的环境中的兼容性

您可以使用跨浏览器解决方案并将
findIndex
替换为
reduce

var idx = json.reduce(function(r, el, i) {
    return !~r && el.id === id ? i : r;
}, -1);
==
表示“无类型强制的相等”,因此您可以将数字转换为字符串

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

这不是JSON,而是一个碰巧通过文本语法创建的对象数组。JSON是对象/数组的字符串表示形式。
var idx = json.reduce(function(r, el, i) {
    return !~r && el.id === id ? i : r;
}, -1);
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);