0

我正在尝试检查三个数组中的任何一个中是否存在一个元素。我不知道如何返回找到元素的数组的名称。谁能指导我正确的方向。

我编写了一个函数,它将搜索中的元素作为其参数,然后返回数组名称:

 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”变量。

谢谢。

4

5 回答 5

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;
于 2012-08-21T16:58:45.013 回答
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;
  }
}
于 2012-08-21T16:58:03.537 回答
1

首先,要小心indexOf()陷阱——如果它找不到请求的字符串,它将返回 -1——这是真的——所以你需要像这样明确地检查:

if (arr1.indexOf(id) != -1)

不是

if (arr1.indexOf(id))

true/falsy 概念还意味着,如果您的字符串是数组中的第一个元素,因此indexOf()返回 false,那么这是一个 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;
于 2012-08-21T17:01:06.277 回答
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;
于 2012-08-21T16:58:38.133 回答
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'));
于 2012-08-21T17:13:00.267 回答