это не дубликат.пожалуйста, смотрите мой комментарий ниже!
Кто-нибудь знает более эффективное решение, чем для циклов в ES6?
Я написал следующее, что не хватает производительности,Есть идеи по улучшению?Высоко ценится.
В основном у меня есть объект, касающийся автомобилей, и массив, касающийся пользовательских предпочтений.Ожидаемое поведение - поместить все соответствующие имена автомобилей в массив.
Пользователи могут предоставить любое количество предпочтений.Название автомобиля следует нажимать только в том случае, если В настройках указаны ВСЕ характеристики.Поэтому некоторые предпочтения будут «остатками».
По этой причине в следующем примере появляется Honda, но не BMW, что является ожидаемым (но очень медленным поведением).
// Car objects
const cars = [{
name: "Honda",
category: "eco",
specs: {
0: "green",
1: "fast",
2: "automatic"
}
},
{
name: "BMW",
category: "sport",
specs: {
0: "blue",
1: "fast",
2: "automatic"
}
}
]
// User preferences
const preferences = ["green", "fast", "4x4", "automatic", "panorama"]
// function to get length/amount of car specifications
function objsize(Myobj) {
var osize = 0,
key;
for (key in Myobj) {
if (Myobj.hasOwnProperty(key)) osize++;
}
return Object(osize);
};
//function to check if ALL specifications are included in the user preferences
function checkSpecs(spec_item) {
return preferences.includes(spec_item)
}
// main function
function filter_func() {
//final results
let matched_cars = []
for (i = 0; i < objsize(cars); i++) {
let specs_collector = []
for (j = 0; j < objsize(cars[i].specs); j++) {
specs_collector.push(cars[i].specs[j])
}
if (specs_collector.every(checkSpecs) === true) {
matched_cars.push(cars[i].name)
specs_collector = []
}
}
console.log(matched_cars)
}
filter_func()