Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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/Jquery数组搜索_Javascript_Jquery_Arrays_Search - Fatal编程技术网

Javascript/Jquery数组搜索

Javascript/Jquery数组搜索,javascript,jquery,arrays,search,Javascript,Jquery,Arrays,Search,我正在开发一个在Javascript中使用嵌套数组的应用程序。我有这样一个数组: var a = ["Once upon a time there was a man."]; a[1] = ["He was tall."]; a[1][1] = ["He often bumped his head."]; a[2] = ["He was short."]; a[2][1] = ["He couldn't reach high she

我正在开发一个在Javascript中使用嵌套数组的应用程序。我有这样一个数组:

var a = ["Once upon a time there was a man."];

    a[1] = ["He was tall."];
           a[1][1] = ["He often bumped his head."];

    a[2] = ["He was short."];
           a[2][1] = ["He couldn't reach high shelves."]
function findMultiArray(array, str) {
    var innerArray;
    for (var i = 0; i < array.length; i++) {
        innerArray = array[i];
        for (var j = 0; j < innerArray.length; j++) {
            if (innerArray[j] == str) {
                return([i, j]);
            }
        }
    } 
    return null;
}
有没有一种简单的方法可以确定值位于数组的哪个级别?我希望能够输入“他经常撞到他的头”,并让它返回“a[1][1]”(或者如果我输入“他很短”,我会返回“a[2]”)。阵列将具有不确定和波动的大小


提前感谢您在这方面的帮助。我不熟悉javascript和jquery,因此非常感谢您对解决方案的任何解释。再次感谢。

一些递归应该可以做到这一点:

Array.prototype.recursiveIndexOf = function(item, start) {
    var i = this.indexOf(item);
    var r, c;

    start = start || [];

    if(i > -1) {
        return start.concat([i]);
    }

    for(i = 0; i < this.length; i++) {
        c = this[i];

        if(Object.prototype.toString.call(c) === '[object Array]') {
            r = c.recursiveIndexOf(item, start.concat(i));

            if(r !== null) {
                return r;
            }
        }
    }

    return null;
};
Array.prototype.recursiveIndexOf=函数(项,开始){
var i=该指数(项目);
var r,c;
开始=开始| |[];
如果(i>-1){
返回start.concat([i]);
}
对于(i=0;i

对于两级阵列,您可以这样做:

var a = ["Once upon a time there was a man."];

    a[1] = ["He was tall."];
           a[1][1] = ["He often bumped his head."];

    a[2] = ["He was short."];
           a[2][1] = ["He couldn't reach high shelves."]
function findMultiArray(array, str) {
    var innerArray;
    for (var i = 0; i < array.length; i++) {
        innerArray = array[i];
        for (var j = 0; j < innerArray.length; j++) {
            if (innerArray[j] == str) {
                return([i, j]);
            }
        }
    } 
    return null;
}
函数findMultiArray(数组,str){
变量数组;
对于(var i=0;i
注意,我让它只返回一个带有两个索引的实际数组,因为如果您需要数据形式的数据,这会更容易使用

与您的请求不同,它永远不会返回与
a[1]
等价的值,因为
a[1]
是数组,而不是字符串,因此匹配的是
a[1][0]
,而不是
a[1]
。在这种情况下,它将返回
[1,0]

如果您想要以不同的形式返回值,那么只有一行代码,其中is看到匹配,i和j是匹配的索引


如果数组的级别可以是任意深度,在不同的位置有不同的深度,那么这就需要更复杂一些,需要查询项目的类型,看看它们是否包含嵌套数组或字符串,并且需要某种堆栈来保持当前位置。使用递归最简单。

这里有一个更简单的答案。;)

函数数组搜索(ob,str)
{

对于(var i=0;我只是想说明一下,你说的不是一个变量,而是一个值。一个变量可以有很多值。一个值就是,某个特定的值。你可以用一个对象来代替。一旦数组变得如此复杂,对象通常更容易处理。@elclans不一定。如果你想迭代呃,通过索引找到它,数组是镇上唯一的游戏。
For…in
循环非常脆弱。不仅如此,某些可能有用的函数只对数组可用。嗯,这真的取决于情况。使用jQuery,我通常更喜欢使用对象并使用
$.map()将内容映射到数组
。这样,只有当您需要时,您才可以减少和计数,并且您仍然拥有具有键值对的有意义对象。。。