Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用indexOf在两个数组中查找匹配项_Javascript_Arrays - Fatal编程技术网

Javascript 使用indexOf在两个数组中查找匹配项

Javascript 使用indexOf在两个数组中查找匹配项,javascript,arrays,Javascript,Arrays,我正在经历免费的挑战。我要做的是: 如果数组第一个元素中的字符串包含 数组第二个元素中字符串的所有字母 例如,[“hello”,“hello”]应该返回true,因为所有 第二个字符串中的字母出现在第一个字符串中,忽略大小写 参数[“hello”,“hey”]应返回false,因为字符串 “hello”不包含“y” 最后,[“Alien”,“line”]应该返回true,因为所有 “line”中的字母出现在“Alien”中 这是我的解决方案。不幸的是,它不起作用,尽管我认为这样解决问题是可能的。

我正在经历免费的挑战。我要做的是:

如果数组第一个元素中的字符串包含 数组第二个元素中字符串的所有字母

例如,[“hello”,“hello”]应该返回true,因为所有 第二个字符串中的字母出现在第一个字符串中,忽略大小写

参数[“hello”,“hey”]应返回false,因为字符串 “hello”不包含“y”

最后,[“Alien”,“line”]应该返回true,因为所有 “line”中的字母出现在“Alien”中

这是我的解决方案。不幸的是,它不起作用,尽管我认为这样解决问题是可能的。我的错在哪里

下面是代码和我的详细注释:

function mutation(arr) {

  //indexOf is case sensitive, so first we make all the elements in the array lowerCase. After that we use the lowerCaseArray instead of our original array

var y = arr.join(" ");
var x = y.toLowerCase();
var lowerCaseArray = x.split(" ")

// This variable will contain the number of matches 

var matchCounter = 0;

//The for loop picks a letter from the second element
//(lowerCaseArray[1][i]) of an array and then we look
//if a match in the first element of an array(lowerCaseArray[0] is found).
//If there is a match, then the indexOf would return a number >=0.
//In this case we add 1 to our matchCounter.

for (i = 0; i < lowerCaseArray[1].length; i++) {
  if(lowerCaseArray[0].indexOf(lowerCaseArray[1][i]) > 0) {
    matchCounter+= 1;

  }

//Finally we compare the matchCounter length with the second
//element of our array.  If matchCounter >= the length of our
//array, it means every letter in the second element was found
//within the first element

}
return matchCounter >= arr[1].length;

}

mutation(["floor", "for"]);
功能突变(arr){
//indexOf是区分大小写的,因此首先我们将数组中的所有元素都设置为小写,然后使用小写数组代替原始数组
变量y=arr.join(“”);
var x=y.toLowerCase();
var lowerCaseArray=x.split(“”)
//此变量将包含匹配数
var-matchCounter=0;
//for循环从第二个元素中拾取一个字母
//(小写字母array[1][i]),然后我们查看
//如果数组的第一个元素中存在匹配项(找到小写字符数组[0])。
//如果存在匹配项,则indexOf将返回一个大于等于0的数字。
//在本例中,我们向matchCounter添加1。
对于(i=0;i0{
匹配计数器+=1;
}
//最后,我们将matchCounter长度与第二个进行比较
//数组的元素。如果matchCounter>=数组的长度
//数组,表示找到了第二个元素中的每个字母
//在第一个元素中
}
返回matchCounter>=arr[1]。长度;
}
突变([“floor”,“for”]);

出于某种原因
返回小写字母array[1][i]
返回“o”,尽管第二个元素的最后一个字母是“r”。在给定的示例中,
matchCount
等于2,但它应该是3,因为有3个匹配项。可能这是有错误的部分。

导致代码返回错误结果的行是:

if(lowerCaseArray[0].indexOf(lowerCaseArray[1][i]) > -1)?
if (lowerCaseArray[0].indexOf(lowerCaseArray[1][i]) > 0) {
它忽略了查找的字符可能位于0位置的可能性

更改为
=
可使其工作。您的注释实际上表明它应该是
=
,但您的代码使用

在其他一些地方,代码可以稍微简化一些。见下文:

功能突变(arr){
//indexOf是区分大小写的,因此首先我们将数组中的所有元素都设置为小写,然后使用小写数组代替原始数组
var lowerCaseArray=arr.map(函数(str){
return str.toLowerCase();
});
//for循环检查第二个字符串中的每个字母
//如果第一封信中没有任何一封信,
//立即返回false
对于(i=0;ilog(突变([“地板”,“代表”])
您需要检查不相等的
-1
,因为零
0
是字符串的有效索引

if (lowerCaseArray[0].indexOf(lowerCaseArray[1][i]) !== -1) {
//                                                  ^^^^^^
功能突变(arr){
变量y=arr.join(“”),
x=y.toLowerCase(),
小写字母array=x.split(“”),
匹配计数器=0,
我
对于(i=0;i=arr[1]。长度;
}

log(突变([“地板”,“代表”])或者,您也可以使用
regex
。这也将为您节省匹配案例的麻烦

样本

功能验证(arr){
var regex_str=arr[0]。替换(/[^a-z0-9]/gi,函数(m){return“\\”+m})
var regex=new RegExp(“^[”+regex_str+“]*$”,“i”);
var valid=正则表达式测试(arr[1]);
log(regex,“|”,arr[1],“|”,有效)
返回有效
}
验证([“楼层”,“用于”])
验证([“地板”,“论坛])
验证([“heworld”、“hello World”])
验证([“heworld”、“hello World”])
验证([“heworldts(*),“hello World(test*)”])
尝试一次匹配('sIng','Singer')

var match=函数(a,b)
{
var-nomatch=0;
var w1=a.toLowerCase();
变量word1=w1.分割(“”);
var string2=b.toLowerCase();
console.log('word1 len:'+word1.length+'+string2+'length:'+string2.length');
对于(var i=0;i0)
{
console.log(b+'不包含'+a'的所有字符);
}
其他的
{
console.log(b+'不包含'+a'的所有字符);
}
}
匹配(“你好”,“地狱”);

我运行了你的代码,它正确地通过了所有3个字母,
f
o
,和
r
。您可以再次运行并验证吗?确实可以,但它返回false,因为匹配计数器等于2而不是3。如果第一个字符串包含像
`或
]`这样的字符,这将中断。@JLRishe感谢您指出这一点。请检查更新。
var match=function(a,b)
{
    var nomatch=0;
    var w1=a.toLowerCase(); 
    var word1=w1.split('');
    var string2=b.toLowerCase();
    console.log('word1 len : '+word1.length+' '+string2+' length : '+string2.length);
        for(var i=0;i<word1.length;i++)
    {
        if(string2.indexOf(word1[i])==-1)
        {
            console.log('no match : '+b+' .indexOf('+word1[i]+')');
            nomatch +=1;
        }
        else
        {
            console.log('match : '+b+'.indexOf('+word1[i]+')');

        }
    }
    if(nomatch>0)
    {
        console.log(b+' does not have all  characters of '+a);
    }
    else
    {
        console.log(b+' do have all  characters of '+a);
    }

}
match('hello','Hell');