替换对象树中的对象

时间:2016-03-24 12:55:09

标签: javascript

我需要从对象树中替换一个对象,我尝试了几种方法,但我不能

let data = [
    {
      "accountId": 2
    }, 
    {
      "accountId": 6,
      "children": [{
        "accountId": 8
      }]
    }, 
    {
      "accountId": 45
    }
];

在上面的对象数组中,我需要替换(当我知道accoundId

{
  "accountId": 2
}

{
  "accountId": 2,
  "children": [
    {
      "accountId": 85
    }
  ]
}

是否有任何方式/库可以做到这一点。

2 个答案:

答案 0 :(得分:2)

普通的javascript,使用Array.prototype.map函数:



var data = [{ "accountId": 2 }, { "accountId": 6, "children": [{ "accountId": 8 }] }, { "accountId": 45 }];

var newData = { "accountId": 2, "children": [{ "accountId": 85 }] };

data = (function upd(data, n) {
    return data.map(e => {
        if (e.children) {
            var o = {};
            o.accountId = e.accountId;
            o.children = upd(e.children, n);
            return o;
        }
        else if (e.accountId == 8) {
            return n;
        } else return e;
    });
})(data, newData);

document.write('<pre>' + JSON.stringify(data, 0, 2) + '</pre>');
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用迭代函数来搜索数组项的id和更新。

function makeUpdate(a, u) {
    return Array.isArray(a) && a.some(function (b,i,bb) {
        if (b.accountId === u.accountId) {
            bb[i] = u;
            return true;
        }
        return makeUpdate(b.children, u);
    });
}

var data = [{ "accountId": 2 }, { "accountId": 6, "children": [{ "accountId": 8 }] }, { "accountId": 45 }],
    update = { "accountId": 8, "children": [{ "accountId": 85 }] };

makeUpdate(data, update);
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');