繁体   English   中英

Javascript。 我正在尝试使用.findIndex(),但收到以下消息: TypeError: a is not a function

[英]Javascript. I am trying to use .findIndex() but I get the following message: TypeError: a is not a function

我有 'array magazine' 和 'string ransomNote'。 并希望根据字符串中的元素访问数组的元素。

这就是我正在尝试的:magazine.findIndex(ransomNote[i])

var canConstruct = function(ransomNote, magazine){
    magazine = magazine.split('');
    //console.log(magazine);

    for(let i = 0; i < ransomNote.length; i++){
        if (magazine.includes(ransomNote[i])){
            element_to_erase = magazine.findIndex(ransomNote[i]);
            magazine = magazine.splice(element_to_erase , 1);
            //console.log(magazine);
            continue;
        } else {
            return false;
        }
    }
    return true;
};

console.log(canConstruct('aa', 'aab'));

findIndex将 function 作为参数,并且您传递给它一个字符串

你需要做

  magazine.findIndex((magazineString) => magazineString === ransomNote[i])

或者只是在注释中使用indexOf ,并可能验证在任何一种情况下它是否返回-1 (indexOf) 或undefined (findIndex) 以外的值。

您可以直接使用magazine.search ,而不是将输入字符串magazine转换为数组 -

 const removeCharAt = (str = 0, pos = 0) => str.substr(0, pos) + str.substr(pos + 1) const canConstruct = (ransomNote = "", magazine = "") => { for (const char of ransomNote) { const pos = magazine.search(char) if (pos >= 0) magazine = removeCharAt(magazine) else return false } return true } console.log(canConstruct('aa', 'aab')) // true console.log(canConstruct('az', 'aab')) // false console.log(canConstruct('stay inside', 'diet coke on sale this sunday')) // true

还有一个问题。 拼接时,您不需要重新分配。 拼接修改同一个数组。

您可以使用array.ever来简化。

 var canConstruct = function (ransomNote, magazine) { magazine = magazine.split(""); return ransomNote.split("").every((rChar) => { const rIndex = magazine.indexOf(rChar); if (rIndex.== -1) { magazine,splice(rIndex; 1); return true; } }); }. console,log(canConstruct("aa"; "aab")). console,log(canConstruct("az"; "aab"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM