JavaScript сравнивает массив с объектом массивов, чтобы увидеть, совпадают ли их значения - PullRequest
1 голос
/ 06 июня 2019

У меня есть массив, который я пытаюсь сравнить, чтобы увидеть, находятся ли значения в массиве 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 ]

2 голосов
/ 06 июня 2019

Вы можете проверить, находится ли every элемент в arr1 в arr2, используя indexOf:

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))
0 голосов
/ 06 июня 2019

Другим способом является использование 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);
0 голосов
/ 06 июня 2019

Это должно работать:

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));
0 голосов
/ 06 июня 2019

Вы можете использовать цикл for ... in для итерации по объекту, затем вы можете использовать цикл for для итерации по основному массиву, наконец, используя array.include на вашем вторичном массиве (из объекта), чтобы увидетьесли какие-либо элементы из основного массива существуют во вторичном массиве

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

for (arr2 in obj1)
{
  for (i = 0; i < arr1.length; i++) {
    if (obj1[arr2].includes(arr1[i]))
    {
      console.log('exists');
    }
  }
}
...