繁体   English   中英

如何通过比较 2 个数组将值推送到新数组

[英]How to push values to new array by comparing 2 arrays

我有 2 个数组。

selectedgroup = [ ID:1, selected:true,
                  ID:2, selected:false,
                  ..... ]

第二个数组是,

 mainarr=[ ID:1, mainid:25, name:ser, pID:545,
            ID:2, mainid:84, name:ferdi, pID:678,
            ID:3, mainid:88, name:ferSER, pID:656,
              ....]

我想检查mainarr包含selectedgroup的元素。 两个数组中的唯一 id 都是ID 然后我想把它推到一个新的阵列上。 我怎样才能做到这一点?

尝试这个

var newarr =[];
for(i=0; i<mainarr.length; i++){
 for(j=0;j<selectedgroup.length; j++){
  if(mainarr[i].ID = selectedgroup[j].ID)
  {
  newarr.push(mainarr[i]);
  }
 }
}

假设您的数组采用以下有效格式。 遍历您mainarr和检查,如果IDmainarr的匹配IDselectedgroup数组,那么只需将物体推入新的数组。 像下面这样:

 var selectedgroup = [ {ID:1, selected:true},{ID:2, selected:false} ]; var mainarr = [ {ID:1, mainid:25, name:'ser', pID:545},{ID:2, mainid:84, name:'ferdi', pID:678},{ID:3, mainid:88, name:'ferSER', pID:656}]; var newArray = []; mainarr.forEach(function(mainObject) { for (let i=0; i<selectedgroup.length; i++){ if(selectedgroup [i].ID === mainObject.ID){ newArray.push(mainObject); } } }); console.log(newArray);

我认为使用过滤器是比使用 forEach 更好的方法。 所以我只包括这个解决方案以供参考。

 var selectedgroup = [ {ID:1, selected:true},{ID:2, selected:false} ]; var mainarr = [ {ID:1, mainid:25, name:'ser', pID:545},{ID:2, mainid:84, name:'ferdi', pID:678},{ID:3, mainid:88, name:'ferSER', pID:656}]; const selectedgroupIds = selectedgroup.map(selected => selected.ID); const newarr = mainarr.filter(main => { return selectedgroupIds.indexOf(main.ID) !== -1; })

Array.prototype.filter()方法创建一个新数组,其中包含所有通过所提供函数实现的测试的元素。 像下面这样:

var selectedgroup = [ {ID:1, selected:true},{ID:2, selected:false} ];
var mainarr = [ {ID:1, mainid:25, name:'ser', pID:545},{ID:2, mainid:84, name:'ferdi', pID:678},{ID:3, mainid:88, name:'ferSER', pID:656}];
var newarr = mainarr.filter(function(eachArr){
              for (var i = 0; i < selectedgroup.length; i++){
                 if(selectedgroup [i].ID === eachArr.ID){
                   return true;
                 } }})

如果 selectedgroup 数组可以有很多值,则可以使用 map 首先获取所有 id 以避免内部循环,然后像@CHANist 所说的那样使用它们进行过滤。

供您参考: Array.prototype.map() 因此,代码将变成

var selectedgroup = [ {ID:1, selected:true},{ID:2, selected:false} ];
var mainarr = [ {ID:1, mainid:25, name:'ser', pID:545},{ID:2, mainid:84, name:'ferdi', pID:678},{ID:3, mainid:88, name:'ferSER', pID:656}];
var ids = selectedgroup.map(function(obj){ return obj.ID});
var newarr = mainarr.filter(function(eachArr){
                for (var i = 0; i < selectedgroup.length; i++){
                   if(ids.indexOf(eachArr.ID) !== -1){
                      return true;
                    } }})

使用下面的代码,

var selectedgroup = [
                      {ID:1, selected:true},
                      {ID:2, selected:false}
                  ];
var mainarr = [
                  {ID:1, mainid:25, name:'ser', pID:545},
                  {ID:2, mainid:84, name:'ferdi', pID:678},
                  {ID:3, mainid:88, name:'ferSER', pID:656}
              ];
var newArray=[];
for (var i = 0, l2 = mainarr .length; i < l2; i++) {
    for (var j = 0, l1 = selectedgroup .length; j < l1; j++) {
        if(mainarr [i].ID===selectedgroup [j].ID){
            newArray.push(mainarr [i]);
        }
    }
 }
 console.log(newArray);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM