Сравнение многомерных массивов в JavaScript - PullRequest
1 голос
/ 29 сентября 2011

Я хотел бы сравнить 2 "многомерных" массива (массивы, вложенные в массивы).

var old_dataArray=new Array(("id-2", "message", "user"), ("id-1", "message", "user"), ("id-0", "message", "user"));
var new_dataArray=new Array(("id-3", "message", "user"), ("id-2", "message", "user"), ("id-1", "message", "user"));

в этом случае я хотел бы получить массив ("id-3", "message", "пользователь"), который содержится только в "old_dataArray", а не в "new_dataArray".

Я пробовал с представленной здесь функцией array_diff.http://phpjs.org/functions/array_diff:309 Но на самом деле это не работает!

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Из того, что я понимаю, вы хотите получить все массивы в new_dataArray, которых нет в old_dataArray, и я предполагаю, что если первый элемент в каждом (элемент 'id-n') одинаков, то то же самое Остальная часть массива. Вы можете сделать это так:

// 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

РЕДАКТИРОВАТЬ: Если, однако, вы хотите, чтобы ВСЕ элементы в каждом массиве были равны, а не только первый (id-n) элемент, используйте это:

// 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
0 голосов
/ 29 сентября 2011
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...