#javascript
#javascript
Вопрос:
Итак, я пытаюсь отфильтровать массив, как показано здесь:
let overrides = rawPluginConfig.overrides;
console.log(overrides);
let passes = overrides.filter(override => {
let symbol = override.level.substring(0, 2);
let scopeLevel = Number(override.level.substring(2));
switch (symbol) {
case '>=':
if(level >= scopeLevel) return false;
return true;
case '==':
if(level === scopeLevel) return false;
return true;
}
});
Это overrides
переменная:
[
{ level: '>=50', config: { message: "Woah, you're a moderator..." } },
{ level: '>=100', config: { message: [Object] } }
]
И это то, что console.log(passes);
регистрируется после его запуска:
[ { level: '>=100', config: null } ]
Почему, если level
переменная равна 51, является scopeLevel
частью >=100
, первое переопределение отфильтровывается, но не второе?
Спасибо!
Комментарии:
1. Перед сравнением обязательно преобразуйте
scopeLevel
в число: в противном случае вы сравниваете строки, а не числа.
Ответ №1:
.filter
сохраняет все, что прошло тест, поэтому в вашем случае вам просто нужно перевернуть возвраты:
let overrides = rawPluginConfig.overrides;
console.log(overrides);
let passes = overrides.filter(override => {
let symbol = override.level.substring(0, 2);
let scopeLevel = Number(override.level.substring(2));
switch (symbol) {
case '>=':
if(level >= scopeLevel) return true;
return false;
case '==':
if(level === scopeLevel) return true;
return false;
}
});
я думаю, именно так вы и хотели, поскольку теперь он регистрирует то, что вы хотите?