我确信这很简单,我曾经有一个检查数组内容的函数。现在我想修改它以检查二维数组。
function ChkArray(Str, Val){
for (var i=0;i<Str.length;i++){
if (Str[i] == Val) {return i;}
}
return -1;
}
我的新尝试:
function ChkArray2(Str, Val){
for (var i=0;i<Str.length;i++){
for (var ii=0;ii<Str[ii].length;ii++){
if (Str[i][ii] == Val) {return i;}
}
}
return -1;
}
答案 0 :(得分:2)
关闭,在你的内循环中,你想要检查外循环中当前项的长度:
function ChkArray2(Str, Val){
for (var i=0;i<Str.length;i++){
for (var ii=0;ii<Str[i].length;ii++){
if (Str[i][ii] == Val) {return i;}
}
}
return -1;
}
应该有效
答案 1 :(得分:1)
如果你问的是更好的方法来解决这个问题,我或许会考虑编写一个可以在数组中使用任意数量维度的函数。在您的示例中,返回值是顶级数组的索引,但为了使其成为通用,您必须返回找到的元素的完整“路径”,并让调用代码决定它想要的信息:
function multiFind(arr, val) { // please don't name an array "str"!
for (var i = 0, l = arr.length; i < l; ++i) {
if (arr[i] === val) {
return [i];
} else if (is_array(arr[i])) {
var ret = multiFind(arr[i], val);
if (ret !== false) {
ret.unshift(i);
return ret;
}
}
}
return false;
}
// this function by Doug Crockford
var is_array = function (value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
var inp = ["a","b",["c", ["d", "e", ["f", "g"], "h"]]];
multiFind(inp, "a"); // [0]
multiFind(inp, "b"); // [1]
multiFind(inp, "c"); // [2, 0]
multiFind(inp, "f"); // [2, 1, 2, 0]
multiFind(inp, "h"); // [2, 1, 3]
multiFind(inp, "x"); // false
答案 2 :(得分:-1)
我建议使用javascript foreach。
function ChkArray2(Str, Val){
for (var i in Str){
for (var ii in Str[i]){
if (Str[i][ii] == Val){
return i;
}
}
}
return -1;
}