Сопоставление значения массива со значением в массиве объектов javascript

#javascript

#javascript

Вопрос:

Я пытаюсь понять, как я могу вернуть список со значениями из own ключа в приведенном ниже массиве, если значение объекта name соответствует значениям в массиве lookupvalues

 lookupvalues = ["ross","linda"]
resources = [{own: "car", name: "bob"},{own: "bike", name: "ross"},{own: "plane", name: "linda"}]
wanted_output = ["bike","plane"]
 

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

Я должен сказать, насколько я впечатлен тем, что я получил 4 ответа с рабочими примерами одновременно!

Ответ №1:

Один из способов (цепочка методов массива) заключается в том, что вы могли filter бы по name и map для получения каждого own

 const lookupvalues = ["ross", "linda"]
const resources = [
  { own: "car", name: "bob" },
  { own: "bike", name: "ross" },
  { own: "plane", name: "linda" },
]

const res = resources
  .filter(({ name }) => lookupvalues.includes(name))
  .map(({ own }) => own)

console.log(res) 

Ответ №2:

 resources.filter(resource => lookupvalues.includes(resource.name))
  .map(resource => resource.own);
 

Это приведет к фильтрации по элементам, имена которых включены в lookupvalues , а затем преобразует массив в массив own значений оставшихся.

Ответ №3:

Вы можете воспользоваться помощью Array#filter и Array#map :

 const lookupvalues = ["ross","linda"]
const resources = [{own: "car", name: "bob"},{own: "bike", name: "ross"},{own: "plane", name: "linda"}]

const filterRes = (arr) => {
  const lookup = new Set(lookupvalues);
  return arr.filter(({name}) => lookup.has(name))
            .map(({own}) => own);
}
console.log(filterRes(resources)); 

Комментарии:

1. Вы использовали Set только для оптимизации между includes и has ?

2. @CoryHarper да, здесь это не будет иметь большого значения, но для длинного lookupvalues массива это будет.

3. По той же причине, по которой я думал, возможно, предложить сделать значения поиска просто объектом string => true пар, когда он инициализирован.

Ответ №4:

 resources.filter(item => lookupvalues.indexOf(item.name) > -1).map(item => item.own)