Поскольку сращивание меняет длину, вы заметите, просматривая ваши журналы, что [,] пропускается в тестах из-за этого (текущий индекс в шагах reduce
больше не соответствует массиву) , Вам, вероятно, следует использовать копию вместо исходного массива при склеивании и протестировать этот массив:
Обратите внимание, что способ создания кода не будет работать с вложенными скобками / скобками. Вы также должны быть осторожны с использованием indexOf
для поиска cur
, потому что он вернет первое найденное, которое, если вы измените свой код, может не соответствовать вашему реальному cur
.
var isValid = function(s) {
let arr = [...s], copy = [...s];
arr.reduce((acc, cur) => {
console.log(`arr in reduce: ${arr}`);
console.log(`copy in reduce: ${copy}`);
console.log(`acc: ${acc}`);
console.log(`cur: ${cur}`);
if ((acc && cur)
&& (
(acc === '(' && cur === ')')
|| (acc === '{' && cur === '}')
|| (acc === '[' && cur === ']')
)) {
copy.splice(copy.indexOf(acc), 2);
console.log(`copy after splice: ${copy}`);
return arr;
}
else {
console.log(`else statement: ${cur}`);
return cur;
}
});
return copy.length === 0 ? true : false;
};
console.log(isValid("()[]{}"));