我需要从对象树中替换一个对象,我尝试了几种方法,但我不能
let data = [
{
"accountId": 2
},
{
"accountId": 6,
"children": [{
"accountId": 8
}]
},
{
"accountId": 45
}
];
在上面的对象数组中,我需要替换(当我知道accoundId
)
{
"accountId": 2
}
到
{
"accountId": 2,
"children": [
{
"accountId": 85
}
]
}
是否有任何方式/库可以做到这一点。
答案 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;
答案 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>');