如何检查JS中是否设置了多维数组项?

Col*_*gol 5 javascript arrays isset multidimensional-array

如何检查JS中是否设置了多维数组项?

w[1][2] = new Array;
w[1][2][1] = new Array;
w[1][2][1][1] = 10; w[1][2][1][2] = 20; w[1][2][1][4] = 30;
Run Code Online (Sandbox Code Playgroud)

如何检查是否w[1][2][1][3]已设置?

解决方案if (typeof w[1][2][1][3] != 'undefined')不起作用.

我不想使用Object而不是Array.

Pat*_*ans 6

在检查其子元素之前,您不检查先前的数组元素是否存在,因为如果父元素不存在,则子元素不存在

if( 
    typeof(w) != 'undefined' &&
    typeof(w[1]) != 'undefined' &&
    typeof(w[1][2]) != 'undefined' &&
    typeof(w[1][2][1]) != 'undefined' &&
    typeof(w[1][2][1][3]) != 'undefined' &&
  ) {
    //do your code here if it exists  
  } else {
    //One of the array elements does not exist
  }
Run Code Online (Sandbox Code Playgroud)

if将在else子句中运行代码,如果它看到任何先前的元素不存在.如果任何前面的检查返回false,它将停止检查其他检查.


bas*_*kum 6

这是一种更通用的方法,您可以通过扩展以下原型来实现Array:

Array.prototype.check = function() {
    var arr = this, i, max_i;
    for (i = 0, max_i = arguments.length; i < max_i; i++) {
        arr = arr[arguments[i]];
        if (arr === undefined) {
            return false;
        }
    }
    return true;    
}

w.check(1, 2, 1, 4); //will be true if w[1][2][1][4] exists
Run Code Online (Sandbox Code Playgroud)

或者如果你不喜欢原型扩展,你可以使用一个单独的函数:

function check(arr) {
    var i, max_i;
    for (i = 1, max_i = arguments.length; i < max_i; i++) {
        arr = arr[arguments[i]];
        if (arr === undefined) {
            return false;
        }
    }
    return true;
}

check(w, 1, 2, 1, 4); //will be true if w[1][2][1][4] exists
Run Code Online (Sandbox Code Playgroud)