Javascript 将对象推送到阵列上而不重复相同的操作
我有一个这样的数组Javascript 将对象推送到阵列上而不重复相同的操作,javascript,arrays,Javascript,Arrays,我有一个这样的数组 var myArray = [{A:[{10:'a'},{11:'b'},{12:'c'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}] var myArray=[{A:[{10:'k'},{11:'j'},{12:'m'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}] 如果我将下面的对象推到数组中 myArray.push({A:[{10:'k'},{11:'j'},{12:'m'}]}); 这将删除现有的数组元素“
var myArray = [{A:[{10:'a'},{11:'b'},{12:'c'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}]
var myArray=[{A:[{10:'k'},{11:'j'},{12:'m'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}]
如果我将下面的对象推到数组中
myArray.push({A:[{10:'k'},{11:'j'},{12:'m'}]});
这将删除现有的数组元素“A”,因为新的数组元素也是主数组元素,它应该被新元素替换
所以新对象应该是这样的
var myArray = [{A:[{10:'a'},{11:'b'},{12:'c'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}]
var myArray=[{A:[{10:'k'},{11:'j'},{12:'m'}]},{B:[{10:'d'},{11:'e'},{12:'f'}]}]
这意味着当第一个元素A被新元素替换时
编辑
A、B也是动态的。可能会有更多类似于D、E的get插入,它们具有相同的子结构。实际上这就是我使用数组的原因。它实际上发生在一个有多个页面的表中。因此,如果相同的元素再次出现在另一个页面中,则应该替换上一个页面。这就是目的只要使用一个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'}];
只需使用一个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'}];
推送数组只会添加一个新值。最好将整个阵列升级为一个对象。现在,您可以选择正确的键并覆盖其值 改为:
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
不存在,它也将由此构造创建
您甚至可以使用
var myArray={A:[{10:'A'},{11:'b'},{12:'c'}],b:[{10:'d'},{11:'e'},{12:'f'}]};
var keys=Object.keys(myArray);
对于(变量i=0;i ”;
}
推送式数组只会添加一个新值。最好将整个阵列升级为一个对象。现在,您可以选择正确的键并覆盖其值
改为:
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
不存在,它也将由此构造创建
您甚至可以使用
var myArray={A:[{10:'A'},{11:'b'},{12:'c'}],b:[{10:'d'},{11:'e'},{12:'f'}]};
var keys=Object.keys(myArray);
对于(变量i=0;i ”;
}
var myArray=[{A:[{10:A'},{11:b'},{12:c'}]},{b:[{10:d'},{11:e'},{12:f'}]},
newData={A:[{10:k'},{11:j'},{12:m'}]};
功能更新(a、u){
var指数;
if(a.some(函数(el,i){return Object.keys(u)[0]在el中?(index=i,true):false;})){
a[指数]=u;
}否则{
a、 推(u);
}
}
更新(myArray、newData);
document.getElementById('out').innerHTML=JSON.stringify(myArray,null,4)代码>
查找索引
如果找到,用新数据替换元素
如果未找到,则将新数据推送到数组的末尾
var myArray=[{A:[{10:A'},{11:b'},{12:c'}]},{b:[{10:d'},{11:e'},{12:f'}]},
newData={A:[{10:k'},{11:j'},{12:m'}]};
功能更新(a、u){
var指数;
if(a.some(函数(el,i){return Object.keys(u)[0]在el中?(index=i,true):false;})){
a[指数]=u;
}否则{
a、 推(u);
}
}
更新(myArray、newData);
document.getElementById('out').innerHTML=JSON.stringify(myArray,null,4)代码>
推送将向数组中添加新值,而不是替换现有值。您认为它为什么应该删除现有数组push
只是将新元素添加到数组中。顺便说一句,为什么不使用简单对象而不是数组?push将向数组添加新值,而不是替换现有值。为什么您认为它应该删除现有数组push
只是将新元素添加到数组中。顺便说一句,为什么不使用简单对象而不是数组呢?但是A,B是动态的。。可能会有更多的像C或D。我会在问题中提到,这与这个结构无关。但是A,B是动态的。。可能会有更多类似于C或D的内容。我会在问题中提到,这与此构造无关。更正,@sforsandeep也适用于不存在的对象。好的,但这不符合要求。它改变了数据结构,从而解决了问题。但无论如何。对于记录,myJSON
不是(a)JSON。它是一个对象。@NinaScholz,实际的要求是在没有重复元素的情况下记住对象,OP最初没有要求数组(尽管编辑过的问题要求)。此外,名称myJSON
只是未编辑问题的一个残余,这是OP给变量的名称。更正了@sforsandeep,它也适用于不存在的对象。好的,但这不符合要求。它改变了数据结构,从而解决了问题。但无论如何。对于记录,myJSON
不是(a)JSON。它是一个对象。@NinaScholz,实际的要求是在没有重复元素的情况下记住对象,OP最初没有要求数组(尽管编辑过的问题要求)。此外,名称myJSON
只是未编辑问题的残余,即OP给变量的名称。如果OP不想更改数据结构,那么这就是最好的答案!我认为,数据结构应该保持不变。但另一个问题出现了:新数据是否可能包含多个键?如果OP不想更改数据结构,那么这是最好的答案!我认为,数据结构应该保持不变。但另一个问题出现了:新数据是否可能包含不止一个键?