Я пытаюсь получить список из списка в Javascript.
Это список:
const cars = [
{
id: 1,
brand: "Mercedes Benz",
properties: [
{
property: "Mechanical",
value: 2,
},
{
property: "Chemical",
value: 2,
},
{
property: "Pressure",
value: 3,
}],
},
{
id: 2,
brand: "BMW",
properties: [
{
property: "Mechanical",
value: 5,
},
{
property: "Chemical",
value: 3,
},
{
property: "Pressure",
value: 6,
}],
}
]
Мне нужны автомобили, которые имеют определенное свойство со значением больше, чем X
Например, если я скажу, что это свойство Mechanical и его значение равно 3, я получу полный объект с идентификатором 2.
У кого-нибудь есть идея? Мне тяжело
Извините за плохое форматирование кода, StackOverflow по какой-то причине не позволяет публиковать его в отформатированном виде.
Совет: я вставляю его в Node REPL ;)
заранее спасибо
Используйте filter
:
const desiredProp = "Mechanical";
const minVal = 3;
const filteredCars = cars.filter(car =>
car.properties.some(
prop => prop.property === desiredProp && prop.value >= minVal
)
);
Если вы ищете только первое совпадение, а не массив всех совпадений, замените filter
на find
.
Вы можете создать функцию propGreaterThan
, которая принимает желаемое свойство и число, которое вам нужно, чтобы оно было больше. Используя комбинацию filter
в массиве cars
и find
в массиве properties
, вы можете найти подходящие автомобили.
const cars = [
{
id: 1,
brand: "Mercedes Benz",
properties: [
{
property: "Mechanical",
value: 2,
},
{
property: "Chemical",
value: 2,
},
{
property: "Pressure",
value: 3,
}],
},
{
id: 2,
brand: "BMW",
properties: [
{
property: "Mechanical",
value: 5,
},
{
property: "Chemical",
value: 3,
},
{
property: "Pressure",
value: 6,
}],
}
]
function propGreaterThan(prop, num) {
return cars.filter(car => {
return car.properties.find(p => p.property === prop).value > num;
});
}
console.info(
propGreaterThan("Chemical", 2)
)