Compare multi dimentional arrays in javascript
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);
精彩评论