Javascript/Jquery数组搜索
我正在开发一个在Javascript中使用嵌套数组的应用程序。我有这样一个数组: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
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()将内容映射到数组
。这样,只有当您需要时,您才可以减少和计数,并且您仍然拥有具有键值对的有意义对象。。。