Как сравнить значения массива со свойствами объекта в этом примере? - PullRequest
0 голосов
/ 23 сентября 2018

Это мой массив:

const ids = [
  "id1",
  "id2",
  "id3"
]

Объект, извлекаемый с помощью файлов cookie

const data = [
    {
      id: "id3" // dynamically populated and can vary, we need this property
      prop2: "prop2", // not needed
      prop3: "prop3" // not needed
    }
]

Как сравнить значения первого массива - ids с data.id, и еслиtrue, покажите некоторую логику (например - console.log(true)? Мне нужно это в if statement.

Пожалуйста обратите внимание , что data.id. Может быть любым, начиная с id1на id3. Мне нужно найти способ динамического сравнения этих значений. В «реальном мире» это может быть что-нибудь от 1 do 50000, но это всего лишь макет для примера.

Также я был бы признателен за пример Лодаша.

Ответы [ 4 ]

0 голосов
/ 23 сентября 2018

Просто введите следующий код:

<html>
<body>
    <button onclick="compareIds()">Click me</button>
    <script>
        const ids = [
              "id1",
              "id2",
              "id3"
            ]

        const data = [
                {
                  id: "id3", // dynamically populated and can vary, we need this property
                  prop2: "prop2", // not needed
                  prop3: "prop3" // not needed
                }
            ]

        function compareIds(){
                var dataObject = findDataInObject();
                for(var i = 0; i < ids.length; i++){
                        if (ids[i] == dataObject){
                            console.log("true");
                        }

                        else{
                            if(i == ids.length -1){
                                console.log("false");
                            }
                    }
                }
        }

        function findDataInObject(){
                    for(key in data) {
                        if(data.hasOwnProperty(key)) {
                            var ArrayOfData = data[key];
                            var IdOfData = ArrayOfData.id;
                            return IdOfData;
                        }
                    }
                }


    </script>
</body>

0 голосов
/ 23 сентября 2018

Для каждого элемента данных вы проверяете, есть ли идентификатор в массиве идентификаторов, и, если да, что-то делаете

const ids = [
    "id1",
    "id2",
    "id3"
]

const data = [
  {
      id: "id3", // dynamically populated and can vary, we need this property
      prop2: "prop2", // not needed
      prop3: "prop3" // not needed
   }
]

// if we have the id in ids array, do something
if (data.some(d => ids.indexOf(d.id) > -1)) {
  // do something
}

Используя lodash:

const ids = [
    "id1",
    "id2",
    "id3"
]

const data = [
  {
      id: "id3", // dynamically populated and can vary, we need this property
      prop2: "prop2", // not needed
      prop3: "prop3" // not needed
   }
]

// if we have the id in ids array, do something
if (_.some(data, d => ids.indexOf(d.id) > -1)) {
  // do something
}
0 голосов
/ 23 сентября 2018

Вы можете перебрать все элементы в массиве, которые являются объектами, и, используя Object.keys, перебрать все ключи в этом объекте, которые можно сравнить с исходным массивом значений.

const ids = [
  "id1",
  "id2",
  "id3"
];

const data = [{
  id: "id3", // dynamically populated and can vary, we need this property
  prop2: "prop2", // not needed
  prop3: "prop3" // not needed
}];

const foundElems = [];
data.forEach((el) => {
  Object.keys(el).forEach(elem => {
    if (ids.indexOf(el[elem]) > -1) {
      var Obj = {};
      Obj[elem] = el[elem];
      foundElems.push(Obj);
    }
  });
});
console.log(foundElems);
0 голосов
/ 23 сентября 2018

Я думаю, это то, что вы ищете:

if (ids.indexOf(data.id) !== -1){
  console.log('true')
}
...