[英]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
和检查,如果ID
的mainarr
的匹配ID
的selectedgroup
数组,那么只需将物体推入新的数组。 像下面这样:
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.