#javascript #arrays #sorting
#javascript #массивы #сортировка
Вопрос:
У меня есть 1 массив с несколькими объектами и объектом. Как мне найти и вернуть данные, соответствующие этому объекту. Вот иллюстрация моего кода.
const cars = [{model:"honda", color:"black", features:[{title:"fast",speed:"100mph"}]}]
const feature = {id:1,title:"fast",speed:"100mph"}
const match = cars.filter(car => car.features.includes(feature))
Это должно вернуть
{model:"honda", color:"black", features:[{title:"fast",speed:"100mph"}]}
но это не так, и я не уверен, почему. Может кто-нибудь помочь?
Комментарии:
1. Вы имеете в виду возвращать объект вместо массива?
Ответ №1:
Вы не можете использовать Array.includes
для этой цели, поскольку вы не можете сравнить два объекта на равенство (вы получите true только в том случае, если они ссылаются на один и тот же объект). Вместо этого вы могли бы использовать Array.some
и Array.every
, чтобы увидеть, дублируются ли у какого-либо features
объекта все его пары ключ / значение в feature
:
const cars = [{
model: "honda",
color: "black",
features: [{
title: "fast",
speed: "100mph"
}]
}];
const feature = {
id: 1,
title: "fast",
speed: "100mph"
};
const match = cars.filter(car => car.features.some(f => Object.keys(f).every(k => f[k] == feature[k])));
console.log(match);
Комментарии:
1. Из ожидаемого результата OP это больше похоже
find
на операцию, чемfilter
. Хотя я могу ошибаться2. @Phil Я учел это, но в каждом из массивов and есть только значение
cars
features
, поэтому неясно, даст ли это желаемый результат, поскольку кажется, что у вас может быть другая машина, которая имеет функцию{title:"fast",speed:"100mph"}