在JSON

时间:2016-03-27 10:23:52

标签: javascript json

我有以下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的对象?

2 个答案:

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