开发者

Compare multi dimentional arrays in javascript

开发者 https://www.devze.com 2023-04-09 02:06 出处:网络
I would like to compare 2 \"multidimensional\" arrays (arrays nested in arrays). var old_dataArray=new Array((\"id-2\", \"message\", \"user\"), (\"id-1\", \"message\", \"user\"), (\"id-0\", \"message

I would like to compare 2 "multidimensional" arrays (arrays nested in arrays).

var old_dataArray=new Array(("id-2", "message", "user"), ("id-1", "message", "user"), ("id-0", "message", "user"));
var new_dataArray=new Array(("id-3开发者_Go百科", "message", "user"), ("id-2", "message", "user"), ("id-1", "message", "user"));

in this case, I would like to get the array("id-3", "message", "user") which is contained only in "old_dataArray" and not in "new_dataArray".

I've tried with the array_diff function presented here. http://phpjs.org/functions/array_diff:309 But it doesn't really work !.


From what I understand, you want to get all arrays in new_dataArray that are not in old_dataArray and I'm assuming that if the first element in each (the 'id-n' element) is the same, then so is the rest of the array. You can do so like this:

// create an array to store our results:
var results = new Array();

// loop through new_dataArray:
outerloop:
for (var i = 0; i < new_dataArray.length; ++i) {

    // loop through old_dataArray to compare the i'th element
    // in new_dataArray with each in old_dataArray:
    for (var j = 0; j < old_dataArray.length; ++j) {

        // check if the ids are the same
        if (new_dataArray[i][0] == old_dataArray[j][0])
            // yes it's there, so move on to the next element of new_dataArray
            continue outerloop;

    }

    // if we get here, continue outerloop; was never called so 
    // this element is not in old_dataArray
    results.push(new_dataArray[i]);

}

// now results contains all arrays that are in new_dataArray 
// but not in old_dataArray

EDIT: If, however, you want ALL the elements in each array to be equal, not just the first (id-n) element, use this:

// create an array to store our results:
var results = new Array();

// loop through new_dataArray:
outerloop:
for (var i = 0; i < new_dataArray.length; ++i) {

    // loop through old_dataArray to compare the i'th element
    // in new_dataArray with each in old_dataArray:
    innerloop:
    for (var j = 0; j < old_dataArray.length; ++j) {

        // check if the arrays are the same size:
        if (new_dataArray[i].length != old_dataArray[j].length)
            // no, so they must be different
            continue innerloop;

        // check if the arrays have the same values
        for (var k = 0; k < old_dataArray[j].length; ++k) {

            if (new_dataArray[i][k] != old_dataArray[j][k])
                // the k'th element is different
                continue innerloop;
        }

        // if we get here, then we have found a match, so move on
        continue outerloop;

    }

    // if we get here, continue outerloop; was never called so 
    // this element is not in old_dataArray
    results.push(new_dataArray[i]);

}

// now results contains all arrays that are in new_dataArray 
// but not in old_dataArray


var old_dataArray = [["id-2", "message", "user"], ["id-1", "message", "user"], ["id-0", "message", "user"]];
var new_dataArray = [["id-3", "message", "user"], ["id-2", "message", "user"], ["id-1", "message", "user"]];

var result = [];

for (var i = 0; i < new_dataArray.length ; i++) {
    var isInOldArray = false;
    console.log(new_dataArray[i][0]);

    for (var j = 0; j < old_dataArray.length; j++) {
         if (old_dataArray[j][0] === new_dataArray[i][0]) {
             isInOldArray = true;
             break;
         };
    };

    if (!isInOldArray) {
        result.push(new_dataArray[i]);
    };
};

alert(result);
0

精彩评论

暂无评论...
验证码 换一张
取 消