Допустим, у нас есть такой объект, как:

{"A":["00002","00003","00004"]}

И массив:

["00002", "00003"]

То, что я пытаюсь сделать, это проверить значения объектов и, если эти значения ключей не все существуют в массиве оповещения пользователя, что значения ключа A не все существуют в массиве.

Что если А неизвестно ??

0
docodernew 24 Фев 2018 в 00:11

4 ответа

Лучший ответ

Вы можете сделать .filter для массива и проверить, существуют ли все значения в другом массиве или нет.

var obj = {"A":["00002","00003","00004"]}
var check = ["00002", "00003"];

if(obj.A.filter(el => !check.includes(el)).length){
  console.log("Some elements does not exists");
}

Обновление: если вы не знаете, что это за ключ:

Там может быть несколько способов, один из которых я бы использовал Object.values(obj)[0] для доступа к массиву.

var obj = {"A":["00002","00003","00004"]}
var check = ["00002", "00003"];

if(Object.values(obj)[0].filter(el => !check.includes(el)).length){
  console.log("Some elements does not exists");
}
1
void 23 Фев 2018 в 21:23

Вы должны получить массив внутри объекта:

object.A

Далее вам нужно перебрать массив, который вы хотите проверить

var allMatch = true;
var object = {"A":["00002","00003","00004"]};
["00002", "00003"].forEach(function(item){
    if(object.A.indexOf(item) === -1){ // -1 when not found
        allMatch = false;
    }
});

alert("Do they all match? " + allMatch);

Или если вам нужна поддержка Old Internet Explorer.

var allMatch = true;
var object = {"A":["00002","00003","00004"]};
var arr = ["00002", "00003"];
for(var i=0;i<arr.length;i++){
    if(object.A.indexOf(arr[i]) === -1){ // -1 when not found
        allMatch = false;
        break; // Stop for loop, since it is false anyway
    }
};

alert("Do they all match? " + allMatch);
0
marc_s 15 Апр 2018 в 17:25
function containsAllData(obj, key, arr)
{
   if(arr.length < obj[key].length)
   {
      alert("Array is not fully contained!");
      return false;
   }
   for(var i = 0; i < obj[key].length; i++)
      if(arr[i] !== obj[key][i])
      {   
         alert("Array contains different data!");
         return false;
      }
   return true;
}
0
Eigendrew 23 Фев 2018 в 21:39

Просто зациклите их и проверьте ..

var haystack = {"A":["00002","00003","00004"]};
var needle = ["00002", "00003"];

function allItemsExist(h, n){
  for(var k in h) if(!~n.indexOf(h[k])) return false;
  return true;
}

if(!allItemsExist(haystack.A, needle)) alert("something is missing");
else alert("everything is here");
0
I wrestled a bear once. 23 Фев 2018 в 21:16