Javascript TypeError:映射不是函数

Javascript TypeError:映射不是函数,javascript,ecmascript-6,Javascript,Ecmascript 6,我有个简单的问题 给定一个由“(”和“)”括号组成的字符串,我们添加最小数量的括号(“(”或“)”,并在任何位置),以便生成的括号字符串是有效的 形式上,括号字符串在以下情况下才有效: 它是空字符串,或者可以写为AB(A与B连接),其中A和B是有效字符串,或者可以写为(A), 其中A是有效字符串。给定一个圆括号字符串,返回要使结果字符串有效必须添加的最小圆括号数 这是我在JS中的解决方案 const minAddToMakeValid = S => { const stack =

我有个简单的问题

给定一个由“(”和“)”括号组成的字符串,我们添加最小数量的括号(“(”或“)”,并在任何位置),以便生成的括号字符串是有效的

形式上,括号字符串在以下情况下才有效: 它是空字符串,或者可以写为AB(A与B连接),其中A和B是有效字符串,或者可以写为(A), 其中A是有效字符串。给定一个圆括号字符串,返回要使结果字符串有效必须添加的最小圆括号数

这是我在JS中的解决方案

const minAddToMakeValid = S => {
    const stack = [];
    let count = 0;
    S.map(c => {
        if(c === '('){
            stack.push(c);
        }
        else if(c === ')' && stack[stack.length -1] === '('){
            stack.pop();
        }
        else{
            count ++;
        }
    });
    return count + stack.length;

};
const S = "())";
console.log(minAddToMakeValid(S));
我得到以下错误

TypeError: S.map is not a function
    at minAddToMakeValid (/Users/melissa/Dropbox/js/leetcode-js/bin/921_minAddToMakeParanthesisValid.js:4:7)
    at Object.<anonymous> (/Users/melissa/Dropbox/js/leetcode-js/bin/921_minAddToMakeParanthesisValid.js:19:13)
    at Module._compile (internal/modules/cjs/loader.js:721:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
    at executeUserCode (internal/bootstrap/node.js:342:17)
    at startExecution (internal/bootstrap/node.js:276:5)
TypeError:S.map不是函数
在MinadTomakeValid(/Users/melissa/Dropbox/js/leetcode js/bin/921_minadTomakeParanthesisValid.js:4:7)
反对。(/Users/melissa/Dropbox/js/leetcode js/bin/921_minadtomakeparanthesisvalid.js:19:13)
at模块编译(内部/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js(internal/modules/cjs/loader.js:732:10)
at Module.load(内部/modules/cjs/loader.js:620:32)
在tryModuleLoad(内部/modules/cjs/loader.js:560:12)
at Function.Module._load(内部/modules/cjs/loader.js:552:3)
位于Function.Module.runMain(internal/modules/cjs/loader.js:774:12)
在executeUserCode(internal/bootstrap/node.js:342:17)
开始执行时(内部/bootstrap/node.js:276:5)

字符串不是
数组
:它没有相同的方法


但是,您可以使用
S.split(“”)
获得一个数组,然后
map
在它上面

S是一个字符串,而不是数组。这就是你无法绘制地图的原因

[…S].map()应该可以工作

是一个扩展运算符。它将接受一些iterable(如字符串或数组)作为参数展开。通过将其放在数组括号内,它将创建一个新数组,其中填充了您“散布”到其中的任何内容

const s = 'test';
const arr = [...s]; // = ['t', 'e', 's', 't']
const S='demo string';
[…S].map((字符)=>{
console.log(char);

})
public int minAddToMakeValid(字符串S){

int输出=0;
int open=0;
char[]sArr=S.toCharArray();
for(字符i=0;i0){
输出--;
开放--;
i=(char)(((i-'0')+1)+'0');
}
如果((i+1

}

所以javascript中的字符串是不可交互的?我不是这么说的:我说它不是
数组,因此它没有访问其方法的权限(例如
map
filter
,等等)文档:|。字符串是可编辑的。它们只是没有映射方法。方法名称看起来不像javascript,请确保函数位于块代码中。
int output = 0;
int open = 0;
char[] sArr = S.toCharArray();
for(char i=0; i < sArr.length; i++){
    if(sArr[i] == '('){
        output++;
        open++;
        if((i+1 < sArr.length) && sArr[i+1] == ')'){
            output--;
            open--;
        }
        else if((i+1 < sArr.length) && sArr[i+1] == '('){
            output++;
            open++;
        }
        i = (char)(((i-'0')+1) + '0');
    }
    else if(sArr[i] == ')'){
        if(open < 1){
            output++;
        }else{
            output--;
            open--;
        }
        if((i+1 < sArr.length) && sArr[i+1] == ')' && open < 1){
            output++;
            i = (char)(((i-'0')+1) + '0');
        }
        else if((i+1 < sArr.length) && sArr[i+1] == ')' && open > 0){
            output--;
            open--;
            i = (char)(((i-'0')+1) + '0');
        }
        else if((i+1 < sArr.length) && sArr[i+1] == '('){
            output++;
            open++;
            i = (char)(((i-'0')+1) + '0');
        }
    }
}
return Math.abs(output);