JavaScript将数组与数组对象进行比较以查看它们的值是否匹配

时间:2019-06-06 18:56:59

标签: javascript arrays javascript-objects

我要比较一个数组,以查看数组1中的值是否在对象内部的任何数组中:

arr1 = [9]

obj1 = {Cards: [8,5], Loans: [], Shares: [0,9,25]}

我正在使用JavaScript(ECMAScript 5)尝试执行此操作,如果在true中找到了arr1中的任何值,我需要返回obj1

我尝试过的事情:

function arraysEqual(_arr1, _arr2) {
  if (!Array.isArray(_arr1) || !Array.isArray(_arr2) || _arr1.length !== _arr2.length)
    return false;
  var arr1 = _arr1.concat().sort();
  var arr2 = _arr2.concat().sort();
  for (var i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i])
      return false;
  }
  return true;
}

但是,这只会测试看看是否是特定的数组,因此我必须调用此命令三次以检查值,即使在尝试以下操作时,它也会返回false

arraysEqual(arr1, obj1.Shares)

希望一次通话即可完成

4 个答案:

答案 0 :(得分:2)

您可以使用every检查arr1中的indexOf项目是否在arr2中:

function compare(arr1, arr2) {
  return arr1.every(function(n){
    return arr2.indexOf(n) > -1
  })
}

var arr = [9],
    obj = { Cards: [8,5], Loans: [], Shares: [0,9,25] }

console.log(compare(arr, obj.Shares))
console.log(compare(arr, obj.Cards))

答案 1 :(得分:0)

您可以使用for ... in循环来遍历对象,然后可以使用for循环来遍历主数组,最后在您的辅助数组(来自对象)上使用array.includes来查看主数组中是否有任何元素存在于辅助数组中

List<List<Integer>> result =
        nodes.values() // Collection<Map<Integer, List<Integer>>>
             .stream() // Stream<Map<Integer, List<Integer>>> 
             .flatMap(m -> m.values() // Collection<List<Integer>>> 
                           .stream()) // Stream<List<Integer>>> 
             // flatMap() prevents Stream<Stream<...>>. 
             // Indeed we get just Stream<List...>>
             .collect(Collectors.toList());

答案 2 :(得分:0)

另一种方法是使用Array.prototype.some(),

var array = [8,9];
var obj = {o1:[18,99], o2:[19], o3:[8,56]};
var p = array.some((arr) => {
    var ret =  Object.values(obj).find((value) => {
        return value.find((val) => val === arr);
    });
    return ret ? true : false;

});

console.log(p);

答案 3 :(得分:0)

这应该工作:

let arr1 = [9, 8]

let obj1 = {Cards: [8,5], Loans: [], Shares: [0,9,25]}

function check(arr1, obj1) {
  let values = Object.keys(obj1).map((key)=> obj1[key]).reduce((acc, val) => acc.concat(val));

   for(let n of arr1) {
        if(values.indexOf(n) === -1) return false;
      }
   return true;
}
  
console.log(check(arr1, obj1));