我有一个像这样的数组
var myArray = [{A:[{10:'a'},{11:'b'},{12:'c'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}]
因此,如果我通过
将follwing对象推送到数组myArray.push({A:[{10:'k'},{11:'j'},{12:'m'}]});
这应该删除现有的数组元素“A”,因为新的元素也是主要的A,它应该被新元素替换。
所以新对象应该是这样的
var myArray=[{A:[{10:'k'},{11:'j'},{12:'m'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}]
这意味着推送第一个元素 A 被新的
替换修改
A,B也是动态的。可能会有更多的插入,如D,E,它们具有相同的子结构。实际上这就是我使用数组的原因。它实际上发生在一个有多个页面的表中。因此,如果同一个元素再次出现在另一个页面中,则应该替换前一个元素。这就是目的
答案 0 :(得分:3)
只需使用javascript对象,它们基本上就像HashMap一样,如果它们具有相同的键,它们将替换它:
var myJSON = {
A: [{10:'a'},{11:'b'},{12:'c'}],
B: [{10:'d'},{11:'e'},{12:'f'}]
};
// will change the existing 'A' object
myJSON['A'] = [{10:'k'},{11:'j'},{12:'m'}];
// add a new element like this
myJSON['C'] = [{10: 't'}, {11: 'g'}, {12: 'm'}];
答案 1 :(得分:1)
推送数组只会添加一个新值。将整个阵列升级为对象会更好。现在,您可以选择正确的密钥并覆盖其值。
更改为:
var myArray = {A : [{10:'a'},{11:'b'},{12:'c'}],B : [{10:'d'},{11:'e'},{12:'f'}]};
现在你做的时候:
myJSON['A'] = [{10:'k'},{11:'j'},{12:'m'}];
它会用新值替换A
。
即使A
不存在,也会由此构造创建。
您甚至可以使用Object.keys
var myArray = {A : [{10:'a'},{11:'b'},{12:'c'}],B : [{10:'d'},{11:'e'},{12:'f'}]};
var keys = Object.keys(myArray);
for (var i = 0; i < keys.length; i++)
{
document.body.innerHTML += keys[i] + " : " + myArray[keys[i]].join(", ") + "<br />";
}
&#13;
答案 2 :(得分:1)
var myArray = [{ A: [{ 10: 'a' }, { 11: 'b' }, { 12: 'c' }] }, { B: [{ 10: 'd' }, { 11: 'e' }, { 12: 'f' }] }],
newData = { A: [{ 10: 'k' }, { 11: 'j' }, { 12: 'm' }] };
function update(a, u) {
var index;
if (a.some(function (el, i) { return Object.keys(u)[0] in el ? (index = i, true) : false; })) {
a[index] = u;
} else {
a.push(u);
}
}
update(myArray, newData);
document.getElementById('out').innerHTML = JSON.stringify(myArray, null, 4);
<pre id="out"></pre>