Javascript 在循环检查匹配字母的单词时使用indexOf时出现问题
请帮我想清楚。。。我试图检查数组第二个元素中的所有字母是否都包含在第一个元素的字母中,忽略大小写。所以“异形”和“线条”应该返回true,因为“线条”中的所有字母都包含在“异形”中,即使它们不按顺序排列。我的问题是,当我尝试循环第一个元素时,我的代码似乎只是检查第一个字母是否匹配,而不是继续遍历整个单词Javascript 在循环检查匹配字母的单词时使用indexOf时出现问题,javascript,indexof,Javascript,Indexof,请帮我想清楚。。。我试图检查数组第二个元素中的所有字母是否都包含在第一个元素的字母中,忽略大小写。所以“异形”和“线条”应该返回true,因为“线条”中的所有字母都包含在“异形”中,即使它们不按顺序排列。我的问题是,当我尝试循环第一个元素时,我的代码似乎只是检查第一个字母是否匹配,而不是继续遍历整个单词 function mutation(arr) { var firstElement = arr[0].toLowerCase().split(''); var secondElement
function mutation(arr) {
var firstElement = arr[0].toLowerCase().split('');
var secondElement = arr[1].toLowerCase().split('');
for (var i = 0; i < firstElement.length; i++) {
return firstElement.indexOf(secondElement[i]) != -1;
}
}
mutation(["hello", "neo"]);
功能突变(arr){
var firstElement=arr[0].toLowerCase().split(“”);
var secondElement=arr[1].toLowerCase().split(“”);
对于(var i=0;i
有什么想法吗?不要拆分第一个元素——将其视为字符串,并使用indexOf方法处理第二个元素中的单个字符
更新——是的,就像下面的Depperm代码一样,但在firstElement上抛出一个toLowerCase。使用Paul Kienitz提到的方法,还可以将循环更改为循环,遍历第二个元素,以检查第一个元素中的每个字符,查看是否在第一个元素中找到该字符。
功能突变(arr){
var firstElement=arr[0];
var secondElement=arr[1].toLowerCase().split(“”);
var匹配=真;
无功温度;
对于(var i=0;i 突变([“你好”,“尼奥])代码>该函数有两个问题:
首先,正如您所说,它只在检查了第一个字母后返回
其次,您需要使用第二个元素的长度作为循环终止条件,因为这是您要循环通过的字母的长度
你需要更像这样的东西:
function mutation(arr) {
var firstElement = arr[0].toLowerCase().split('');
var secondElement = arr[1].toLowerCase().split('');
for (var i = 0; i < secondElement.length; i++) {
if(firstElement.indexOf(secondElement[i]) === -1) {
return true;
}
}
return false;
}
功能突变(arr){
var firstElement=arr[0].toLowerCase().split(“”);
var secondElement=arr[1].toLowerCase().split(“”);
对于(var i=0;i
您可能还希望处理一些明显的边界情况,例如null/undefined/empty strings,但为了清楚起见,我省略了它。它只检查第一个字母,因为当它进入循环时,return语句被执行,因此函数终止
function mutation(arr) {
var firstElement = arr[0];
var secondElement = arr[1];
return secondElement.split('').every(function(elem) {return firstElement.indexOf(elem) != -1;} );
}
mutation(["Aliens", "lines"]);
您可以使用map
和reduce
来保存代码行
function mutation(arr) {
var secondElement = arr[1].toLowerCase().split('');
var map = secondElement.map(function(a){return arr[0].indexOf(a) != -1});
return map.reduce(function(a,b) {return a&&b;}, true);
}
在第二行,检查第二个单词中的每个字母是否在第一个单词中(并保存true/false)。第三行只是将这些结果累加到最后一个变量中
参考文献
谢谢你的回复,但这给了我同样的结果。你有数组还是字符串数组?谢谢,我有类似于else-return-false的东西,但我需要将return-false放在循环之外。这很好,我需要在地图上读一下,它似乎很有用,只是我现在很难概念化。是的,这些都是非常有用的函数,你们应该试试。希望它有用,祝你们有一个愉快的一天。这是一些很好的代码,它完成了我在忽略案例时试图做的事情,但我不熟悉。每种方法。看起来是避免不必要的for循环的好方法,尽管这是我在开始这个问题时的一个雄辩目标。如果数组的每个元素都满足回调方法(if返回true),则数组的cheesevery方法返回true。有关更多信息,请参阅此。