在json对象中搜索元素以更新/添加此对象中的一些数据

时间:2015-11-02 21:46:51

标签: javascript json

我需要像这样在json对象中搜索一个元素:

var new_a = 'new';
var json = { cells: 
    [ { type: 'model',
        id: '5aef826a1809',
        attrs: {
                text: 'first',
                a: 'changethis'
            }
      },
      { type: 'model',
        id: '2c11b8bd8112',
        attrs: {
                text: 'second'
            }
      }
    ]
}
  1. 现在我想找到包含id = 5aef826a1809的对象,因为我想将a的值更改为new_a或插入a - 元素如果它不存在。

  2. 如果id = 2c11b8bd8112添加了内容为a的新new_a - 元素。

  3. 我尝试使用

    var res = _.find(json.cells, { id: '5aef826a1809' }); // doesn't work
    res.attrs.a = new_a; // this would update or add new field, right?
    

    但这不起作用

3 个答案:

答案 0 :(得分:0)

试试这个

var new_a = 'new';
var json = {
    cells: [{
        type: 'model',
        id: '5aef826a1809',
        attrs: {
            text: 'first',
            a: 'changethis'
        }
    }, {
        type: 'model',
        id: '2c11b8bd8112',
        attrs: {
            text: 'second'
        }
    }]
};
var obj = json.cells.find(function (x) {
    return x.id == '5aef826a1809'
});
if (obj) { // return value if found else return undefined if not found
    obj.attrs.a = new_a;
    console.log(json);
}

JSFIDDLE

答案 1 :(得分:0)

使用这个简单的 for循环应该有效,如果这就是你要找的东西:

for(var i = 0; i<json.cells.length; i++){
    if(json.cells[i].id == "5aef826a1809" || json.cells[i].id == "2c11b8bd8112"){
            json.cells[i].attrs.a = "new_a";
    }
}

希望它有所帮助。

答案 2 :(得分:0)

您可以使用Array.prototype.some进行搜索,更改和短路,以防止超出必要的迭代次数。

var new_a = 'new',
    json = {
        cells: [{
            type: 'model',
            id: '5aef826a1809',
            attrs: {
                text: 'first',
                a: 'changethis'
            }
        }, {
            type: 'model',
            id: '2c11b8bd8112',
            attrs: {
                text: 'second'
            }
        }]
    };

function change(id) {
    json.cells.some(function (a) {
        var i = id.indexOf(a.id);
        if (~i) {
            a.attrs = a.attrs || {};
            a.attrs.a = new_a;
            id.splice(i, 1);
            if (!id.length) {
                return true;
            }
        }
    });
}

change(['5aef826a1809', '2c11b8bd8112']);
document.write('<pre>' + JSON.stringify(json, 0, 4) + '</pre>');