Есть ли способ поиска по определенным ключам внутри объекта, а затем записать результаты? - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь найти способ поиска по объекту, чтобы проверить, есть ли совпадение со значением поиска. Оттуда я хочу перечислить, какие объекты имели совпадение.

В этом примере я хочу выполнить поиск по name1 и name2 и посмотреть, имеет ли какой-либо из них значение options, равное C. Если есть совпадение, перечислите, какие объекты соответствовали поиску. Если бы значение поиска было для A, тогда оно показывало бы только name1.

Я пытался настроить myObject с данными, но я не уверен, как пройтись по объекту, проверьте конкретные значения клавиши options, чтобы сравнить их с поиском.

let myObject = {
  name1: {
    title: 'Mr',
    options: ['A', 'B', 'C'],

  },

  name2: {
    title: 'Mrs',
    options: ['C', 'D', 'E'],

  }
};


function myFunction() {

  var optionSearch = 'C';

  console.log(optionSearch);
  for (var i = 0; i < myObject.length; i++) {
    if (myObject[i].options == optionSearch)
      console.log(myObject[i] + ' is equal to optionSearch');
    else {
      console.log('No match');
    }
  }
}

myFunction();

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Объекты не имеют свойства length по умолчанию. Таким образом, вы не можете использовать цикл for с числовыми индексами. Вместо этого вы можете использовать for...in для обхода объекта следующим образом:

let myObject = {
  name1: {
    title: 'Mr',
    options: ['A', 'B', 'C'],
  },
  name2: {
    title: 'Mrs',
    options: ['C', 'D', 'E']
  }
};

function myFunction(optionSearch) {
  for (var key in myObject) {
    if (myObject[key].options.includes(optionSearch))
      console.log(key + ' has : ' + optionSearch)
  }
}

myFunction('C')
myFunction('A')

Вы также можете filter ключи, которые имеют значение options, которое includes заданное option

let myObject = {name1:{title:'Mr',options:['A','B','C'],},name2:{title:'Mrs',options:['C','D','E'],}};

function getKeys(obj, option) {
  return Object.keys(obj).filter(k => obj[k].options.includes(option))
}

console.log(getKeys(myObject, 'C')) // [ "name1", "name2"]
console.log(getKeys(myObject, 'A')) // [ "name1" ]
0 голосов
/ 03 мая 2019
var myObject = {
  name1: {
    title: 'Mr', 
    options: ['A', 'B', 'C'], 

  },
  name2: {
    title: 'Mrs', 
    options: ['C', 'D', 'E'], 

  }
};

function myFunction(optionSearch) {
  console.log(optionSearch);
  for(var i in myObject) {
    if (myObject[i].options.indexOf(optionSearch) >= 0)
      console.log(i + ' is equal to optionSearch');
    else {
      console.log('No match');
    }
  }
}
0 голосов
/ 03 мая 2019

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

Object.keys(myObject)
  .filter((key) => {
    return myObject[key].options.includes(optionSearch)
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...