我有这两个数组:
array1 = ["a,1", "b,2", "c3", "d4", "e5", "f6"];
array2 = [1, 2, 3, 4];
我试图找出第一个数组的元素是否在第二个数组中。
for (i = 0; i < array1.length; i++) {
if(array2.indexOf(array1[i][1]) != -1) {
console.log('In array: '+array1[i][1]);
} else {
console.log('NOT in array: '+array1[i][1]);
}
在这种情况下,我总是在数组中得到消息NOT。
但如果我这样修改代码:
for (i = 0; i < array1.length; i++) {
if(array2.indexOf(1) != -1) {
console.log('In array: '+array1[i][1]);
} else {
console.log('NOT in array: '+array1[i][1]);
}
输出是在数组中:。
使用数字作为indexOf()函数的参数,它可以工作,但不使用变量。。。这怎么可能?
感谢
在您的代码中:
if(array2.indexOf(array1[i][1]) != -1) {
根据indexOf的算法,使用严格比较将字符串与数字进行比较。此外,在大多数情况下,比较数组1中的错误字符。In:
"a,1"
字符1是逗号,而不是数字。您需要做的是从array1中的字符串中获取数字,将它们转换为数字类型,以便indexOf使用以下表达式工作:
+array1[i].replace(/D/g,'')
然后进行比较,例如:
array1 = ["a,1", "b,2", "c3", "d4", "e5", "f6"];
array2 = [1, 2, 3, 4];
for (var i=0, iLen=array1.length; i<iLen; i++) {
if (array2.indexOf(+array1[i].replace(/D/g,'')) != -1) {
console.log('In array: ' + array1[i]);
} else {
console.log('Not in array: ' + array1[i]);
}
}
// In array: a,1
// In array: b,2
// In array: c3
// In array: d4
// Not in array: e5
// Not in array: f6
您可能需要修改正则表达式,根据数组1中的全部字符串来获取数字。
另一种选择是将array2的成员转换为字符串,并在数组1中搜索它们。