Ошибка типа: карта не является функцией - PullRequest
0 голосов
/ 13 января 2019

У меня простая проблема,

Учитывая строку S из скобок '(' и ')', мы добавляем минимальное количество скобок ('(' или ')' и в любых позициях), чтобы полученная строка скобок была действительной.

Формально строка в скобках действительна тогда и только тогда, когда: Это пустая строка, или она может быть записана как AB (объединенная с 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)

Ответы [ 2 ]

0 голосов
/ 13 января 2019

S - это строка, а не массив. Вот почему вы не сможете отобразить это.

[... S] .map () должно работать.

... является оператором распространения . Потребуется что-то итеративное (например, строка или массив), которое будет распространяться как аргументы. Поместив его в скобки массива, он создаст новый массив, заполненный всем, что вы «добавили» в него.

const s = 'test';
const arr = [...s]; // = ['t', 'e', 's', 't']

const S = 'demo string';

[...S].map((char)=>{
  console.log(char);
})
0 голосов
/ 13 января 2019

A String не является Array: у него нет тех же методов.

Однако вы можете использовать S.split(""), чтобы получить массив, а затем map поверх него

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...