JavaScript

Сравнение двухмерного массива

Здравствуйте,
Имеется двухмерный массив:
var arr = [
[5, 1, 0],
[1, 1, 0],
[5, 1, 0],
[4, 1, 0],
[3, 0, 0],
[1, 0, 0],
];
и пустой массив:
var result = [];
Задача состоит в следующем:
если первые индексы массива одинаковые, например 5
то удалить дубли и сложить вторые индексы, получить [5, 2, 0],
т. е из [5, 1, 0] и [5, 1, 0] получить [5, 2, 0]
и еще, если второй индекс равен нулю - то удалить, например [3, 0, 0] или [1, 0, 0],
в итоге нужно получить в result:
result = [
[5, 2, 0],
[1, 1, 0],
[4, 1, 0],
];
var arr = [
[5, 1, 0],
[1, 1, 0],
[5, 1, 0],
[4, 1, 0],
[3, 0, 0],
[1, 0, 0],
]
arr.sort()
for (var i = 0; i < arr.length; i++){
if (arr[i][1] == 0) {
arr.splice(i, 1)
}
}
for (var i = 1; i < arr.length; i++) {
if (arr[i][0] == arr[i - 1][0]){
arr[i - 1][1] += arr[i][1]
arr.splice(i, 1)
i--
}
}
console.log(arr)
Серёга Кансияров
Серёга Кансияров
144
Лучший ответ
Сергей Волковский sort по умолчанию сортирует их как строки. Это сработало только потому что там числа меньше 10 ) А скажем, console.log( "9" < "11" ); // выводит true. Для реальной сортировки нужно прописать более сложную функцию
На условии "если второй индекс равен нулю - то удалить" надоело делать, и так длинно получилось
>>>
first = [];
var arr = [
[5, 1, 0],
[1, 1, 0],
[5, 1, 0],
[4, 1, 0],
[3, 0, 0],
[1, 0, 0],
];
for (var i = 0; i < arr.length; i++) {
first.push(arr[i][0])
};
var b = [];
for (var i = 0; i < first.length; i++) {
for (var j = 0; j < first.length; j++) {
if (i == j) {
continue;
}
if (first[i]==first[j]) {
b.push(first[i]);
var n = first[i];
}
for (var k = 0; k < first.length; k++) {
if (first[k] == n) {
first.splice(k, 1);
}
};
};
};
for (var i = 0; i < arr.length; i++) {
for (var n = 0; n < b.length; n++) {
if (b[n] == arr[i][0]) {
console.log(b[n]);
arr[i][1] += arr[i][1];
break
}
}
};
console.log(arr)
Очередной дебилоид который вместо вопроса решил поделиться тем что ему "нужно"... раз нужно - делай, а не личико отращивай.
Массивы сравниваются перебором их элементов. Хоть двумерные, хоть двадцатимерные: несколько ссылочных переменных, два цикла, и детская логика условий (либо, рекурсией... она проще, и допустима при одном уровне вложенности. Но цикл естессно предпочтительнее, чтобы впоследствии не переписывать при росте вложенности).
Сергей Гунин
Сергей Гунин
74 115
Ялчин Калаев Сам бля мудаеб... Я вопрос задал
Ялчин Калаев Люди ответили уже, меня устраивает
console.log( result );