Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象推送到阵列上而不重复相同的操作_Javascript_Arrays - Fatal编程技术网

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不想更改数据结构,那么这是最好的答案!我认为,数据结构应该保持不变。但另一个问题出现了:新数据是否可能包含不止一个键?