[英]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.