const func = (arr, parametres) => {
for (let i = 0; i < parametres.length; i++) {
let founded = false;
for (let j = 0; j < arr.length; j++) {
if (
arr[j].property1 === parametres[i].property1 &&
arr[j].property2 === parametres[i].property2
) {
founded = true;
}
}
if (parametres[i].type === 'type1') {
if (founded) {
return false;
}
}
if (parametres[i].type === 'type2') {
if (!founded) {
return false;
}
}
}
return true;
};
function func(arr, parametres) {
for (let i = 0; i < parametres.length; i++) {
const param = parametres[i];
let condition;
if (param.type === 'type1') {
condition = true;
} else if (param.type === 'type2') {
condition = false;
} else {
// может ли быть 'type3' или что-то такое, тогда пропускаем этот шаг
continue;
}
// судя по телу второго цикла
// при каждой итерации founded переписывается
// значит в результате происходит сравнение только последней пары
// и цикл можно убрать
if (
(
arr[arr.length - 1].property1 === param.property1 &&
arr[arr.length - 1].property2 === param.property2
) === condition
) {
return false;
}
// но скорее всего это была бага, и цикл нужно переписать так
for (let j = 0; j < arr.length; j++) {
if (
(
arr[j].property1 === param.property1 &&
arr[j].property2 === param.property2
) === condition
) {
// при первом же совпадении функция будет завершена
// без бесполезных проходов по оставшимся элементам
return false;
}
}
}
return true;
};
break;
сразу после founded = true;
и для скорости можно закэшировать текущие элементы arr[j]
и params[i]
для чуть более быстрого обращения к ним в цикле:_arr = arr[j];
// ...
_param = parametres[i];
if( _arr.p1 === _param.p1 && _arr.p2 === _param.p2) { ...