为了账号安全,请及时绑定邮箱和手机立即绑定

为什么用reduce()跳过方括号?

为什么用reduce()跳过方括号?

我有以下代码:var isValid = function(s) {    let arr = [...s];    arr.reduce((acc, cur) => {        console.log(`arr in reduce: ${arr}`);        console.log(`acc: ${acc}`);        console.log(`cur: ${cur}`);        if ((acc && cur)        && (            (acc === '(' && cur === ')')            || (acc === '{' && cur === '}')            || (acc === '[' && cur === ']')        )) {            arr.splice(arr.indexOf(acc), 2);            console.log(`arr after splice: ${arr}`);            return arr;        }        else {            console.log(`else statement: ${cur}`);            return cur;        }    });    return arr.length === 0 ? true : false;};console.log(isValid("()[]{}"));如果满足以下条件,则需要返回true:开括号必须用相同类型的括号封闭。开括号必须以正确的顺序关闭。我的代码未通过此测试"()[]{}":它总是返回[,]并且我不明白为什么。我已经尝试使用正则表达式,anscii作为方括号,但是它不起作用。
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您可以使用一个对象作为预期的结束字符,如果找到了一个开放字符,则将预期的结束字符推入堆栈。


否则,请对照该字符检查弹出的值。


var isValid = function([...array]) {

        var stack = [],

            open =  { '(': ')', '[': ']', '{': '}' };

        return array.every(c => c in open ? stack.push(open[c]) : c === stack.pop())

            && !stack.length;

    };


console.log(isValid("()[]{}"));

console.log(isValid("(({}[()]))[]{}"));

console.log(isValid("()[]{}}"));

console.log(isValid("["));


查看完整回答
反对 回复 2021-04-08
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信