Javascript 2d array indexOf

前端 未结 9 1569
既然无缘
既然无缘 2020-11-28 12:03

I have a 2d array like this:

var arr = [[2,3],[5,8],[1,1],[0,9],[5,7]];

Each index stores an inner array containing the coordinates of some

相关标签:
9条回答
  • 2020-11-28 12:44

    You cannot use indexOf to do complicated arrays (unless you serialize it making everything each coordinate into strings), you will need to use a for loop (or while) to search for that coordinate in that array assuming you know the format of the array (in this case it is 2d).

    var arr = [[2,3],[5,8],[1,1],[0,9],[5,7]];
    var coor1 = [0, 9];
    var coor2 = [1, 2];
    
    function isItemInArray(array, item) {
        for (var i = 0; i < array.length; i++) {
            // This if statement depends on the format of your array
            if (array[i][0] == item[0] && array[i][1] == item[1]) {
                return true;   // Found it
            }
        }
        return false;   // Not found
    }
    
    // Test coor1
    console.log("Is it in there? [0, 9]", isItemInArray(arr, coor1));   // True
    
    // Test coor2
    console.log("Is it in there? [1, 2]", isItemInArray(arr, coor2));   // False
    
    // Then
    if (!isItemInArray(arr, [x, y])) {
       arr.push([x, y]);
    }
    

    This implementation loops and grabs every value. If you care about performance you can do more complicated things like sorting the original array by the first index and then using binary search on the first index.

    Another way is to bucket the first coordinate of each item in the array in an object (like a hashtable) and bucket the second value in each of those buckets to reduce search times; more info here http://en.wikipedia.org/wiki/Bucket_sort.

    Otherwise this is probably good enough for what you need.

    0 讨论(0)
  • 2020-11-28 12:44

    Not a complete answer just a side note that may help.

    Use Lodash

    This method will get you the position of a value within a 2 dimensional array

    let a = [ [ 'bird' ], [ 'cat' ], [ 'dog' ], [ 'cow' ], [ 'bird' ] ];
    let b = _.findIndex(a, function(el) { return el[0] == 'cow'; });
    console.log(b);//answer is 3
    

    As mentioned earlier you need a nested loop for traversing through the array.

    0 讨论(0)
  • 2020-11-28 12:46

    Because this is a two dimensional Array, you will need a nested for loop.

    var newArr = [1, 2],
        counter;
    
    
    for ( var i = 0; i < arr.length; i++ ) {
    
        for ( var x = 0; x = arr[i].length; x++ ) {
    
            if ( arr[i][x] === newArr[x] {
    
                 counter++ 
            }
    
            if (counter === 2) {
                alert('new coord!')
            }
        }
        //reset counter
        counter = 0;
    }
    
    0 讨论(0)
提交回复
热议问题