我正在尝试检查三个数组中的任何一个中是否存在元素。我不知道如何返回找到元素的数组的名称。任何人都可以指引我走向正确的方向。
我编写了一个函数,它将搜索中的元素作为参数,然后返回数组名称:
var arr1 = ['a','b','c','d'];
var arr2 = ['e','f','g','h'];
var arr3 = ['i','j','k','l'];
function chkElem(elem)
{
var id = elem;
var isFound = null;
if(arr1.indexOf(id) || (arr2.indexOf(id) || (arr3.indexOf(id))))
{
isFound = ????
}
return isFound;
}
我不确定如何将父数组名称分配给' isFound'变量。
感谢。
答案 0 :(得分:2)
你不应该在你的函数逻辑中使用“变量名称”。而是,创建一个对象的数组属性并返回属性名称:
var arrays = {
"arr1": ['a','b','c','d'],
"arr2": ['e','f','g','h'],
"arr3": ['i','j','k','l']
};
for (var name in arrays)
if (arrays[name].indexOf(id) > -1)
return name;
return null;
或者,更好的是,使用数组数组进行搜索并返回索引:
var arrays = [
['a','b','c','d'],
['e','f','g','h'],
['i','j','k','l']
];
for (var i=0; i<arrays.length; i++)
if (arrays[i].indexOf(id) > -1)
return i;
return -1;
答案 1 :(得分:1)
逐个测试:
if (arr1.indexOf(id) > -1) {
isFound = arr1;
} else if (arr2.indexOf(id) > -1) {
isFound = arr2;
} else if (arr3.indexOf(id) > -1) {
isFound = arr3;
}
或者,创建一个多维数组:
var arr = [
['a','b','c','d'],
['e','f','g','h'],
['i','j','k','l']
];
var isFound = null;
for (var i = 0; i < arr.length; i++) {
if (arr[i].indexOf(elem) > -1) {
isFound = arr[i];
break;
}
}
答案 2 :(得分:1)
首先,要小心indexOf()
陷阱 - 如果找不到请求的字符串,它将返回-1 - 这是一个真正的 - 所以你需要像这样明确检查:
if (arr1.indexOf(id) != -1)
不
if (arr1.indexOf(id))
truthy / falsy概念也意味着,如果你的字符串是数组中的第一个元素,那么indexOf()
返回false,那是一个假的,所以你的条件实际上会失败,即使匹配是制成!
其次,您不能返回数组的名称 - 或者更确切地说,是返回在JS内存中引用它的变量的名称。你可以:
1)返回数组本身
if (arr1.indexOf(id) != -1) return arr1;
2)将数组存储在中心对象中,并返回在
中找到的属性的名称var arrs = {
'one': ['foo', 'bar']
/* two, three etc */
};
for(var i in arrs)
if (arrs[i].indexOf('foo') != -1)
return i;
答案 3 :(得分:0)
当你有一组东西时,将它们存储在一个数组中(如果它们是有序的)或一个对象(如果它们被命名)。如果您发现一堆名称几乎相同的变量,那么您可能做错了。
var things = [
['a','b','c','d'],
['e','f','g','h'],
['i','j','k','l']
];
然后你可以循环它们:
for (var i = 0; i < things.length; i++) {
var thing = things[i];
if (thing.indexOf(id) > -1) { // indexOf returns -1 if not found, and the index (starting from 0) if it is.
return i;
}
}
return null;
答案 4 :(得分:0)
var arr1 = ['a', 'b', 'c', 'd'];
var arr2 = ['e', 'f', 'g', 'h'];
var arr3 = ['i', 'j', 'k', 'l'];
function chkElem(elem) {
var isFound;
(isFound = arr1).indexOf(elem) > -1 || (isFound = arr2).indexOf(elem) > -1 || (isFound = arr3).indexOf(elem) > -1;
return isFound;
}
alert(chkElem('f'));