JavaScript - 在对象中搜索数组值

时间:2015-12-17 18:09:28

标签: javascript

我有一个数组和一个对象数组。我想在对象数组中搜索数组中的每个值,如果它不存在,我想从数组中删除该值。

var arr= [1,2,3,4];

var recs = [{id:1},{id:2},{id:3}]; //4 doesnt exist in recs, remove from arr

//arr = [1,2,3];

继承我的尝试。显然不起作用。在移动下一个arr索引之前,我不确定如何将每个arr索引与recs中的所有值进行比较:

var arr= [1, 2, 3, 4], index;

var recs = [{a:1},{a:2},{a:3}];

for(var i = 0; i<arr.length; i++){
  for(var val in recs[i]){
    if(arr[i] != recs[i][val]){
      index = arr.indexOf(arr[i]);
      arr.splice(index, 1);          
    }
  }
}
谢谢!!

2 个答案:

答案 0 :(得分:4)

如果您可以单独保留原始数组实例并创建一个新实例(基本上将其视为不可变)

var newArr = arr.filter(function(num) {
  return !recs.every(function(obj) {
    return obj.a !== num;
  });
});

使用的方法的详细信息:Array.filter传递一个函数,在内部的每个元素上运行该函数,然后返回一个新的数组,只包含在函数中返回true的元素。

Array.every有点类似,但返回一个布尔值,true或false。如果数组的所有元素都在函数内部返回true,则返回true。

答案 1 :(得分:0)

var arr= [1, 2, 3, 4];

var recs = [{a:1},{a:2},{a:3}];

// don't use var in for loops.
// Variables declared with var have function scope, so declare them at the top of your function
var i;
var j;
var value;
var found;
// iterate over the array
for (i = 0; i < arr.length; i++)
{
  value = arr[i];
  found = false;
  // iterate over the other array
  for (j = 0 ; j < recs.length ; j++)
  {
    // if we found what we were looking for, make a note and exit loop
    if (recs[j].a == value)
    {
      found = true;
      break;
    }
  }
  if (!found)
  {
    arr.splice(i, 1);
    // To compensate the loop's i++, to avoid skipping the next entry
    i--;
  }
}
alert(arr.join(','));