#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)