7

How to check if a multidimensional array item is set in 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;

How to check if w[1][2][1][3] is set?

Solution with if (typeof w[1][2][1][3] != 'undefined') doesn't work.

I don't want to use an Object instead of Array.

8
  • what about if (w[1][2][1][3] != 'undefined') ? Commented Jun 2, 2013 at 14:06
  • that would check w[1][2][1][3] value is the text "undefined" Commented Jun 2, 2013 at 14:06
  • In what way does the typeof way not work? Commented Jun 2, 2013 at 14:09
  • @Patrick Evans, it returns error: TypeError: w[w1][w2][w3] is undefined in code: if (typeof w[w1][w2][w3][w4] != 'undefined') { return w[w1][w2][w3][w4]; } Commented Jun 2, 2013 at 14:20
  • then you need to check each previous array element for existence before checking the others. Commented Jun 2, 2013 at 14:22

2 Answers 2

6

You are not checking the previous array elements existence before checking its children as the children elements cant exist if the parent doesnt

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
  }

The if will run the code in the else clause if it sees any of the previous elements not existing. It stops checking the others if any of the preceding checks returns false.

Sign up to request clarification or add additional context in comments.

Comments

6

Here is a more generic way you can do it by extending the prototype of 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

or if you don't like prototype extension you could use a separate function:

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

1 Comment

I was unable to get your check function to work. See my test code below. I added a workaround below your 'check' that did work for me.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.