Здравствуйте,
Есть данный код
var arr = [
[50, 50, '3'],
[1, 1, '6'],
[50, 50, '9']
];
for (let j = 0; j < arr.length; j++) {
for (let n = 0; n < arr.length; n++) {
if (arr[j][n] == arr[j++][n++]) {
arr[j].splice(2, 1);
}
}
}
console.log(arr);
Необходимо сравнивать по двум элементам. То есть если первые элементы совпадают сравнивать второй элемент и если они тоже совпадают удалять 3 элемент у совпавших массивов.
на выходе должен получиться массив:
arr = [
[50, 50],
[1,1,'6'],
[50,50]
];
Не такая простая задача как может показаться. По-моему, без двойного прохода тут не обойтись.
Для начала вам требуется пройтись по элементам и собрать информацию о повторениях.
После пройтись для удаления ненужных элементов.
В итоге получилось что-то вроде этого (это можно оптимизировать):
var arr = [
[50,50,'3'],
[1,1,'6'],
[50,50,'9']
];
var counter = [];
for(let j = 0; j < arr.length; j++) {
if (arr[j][0] == arr[j][1]) {
counter.push(arr[j][0]);
}
}
for(let j = 0; j < arr.length; j++) {
if (getCountOfElement(arr[j][0]) > 1){
arr[j].splice(2, arr[j].length - 2);
}
}
function getCountOfElement(value) {
var count = 0;
for (var i = 0; i < counter.length; ++i){
if(counter[i] == value)
count++;
}
return count;
}
console.log(arr);
Можно обойтись одним проходом, для этого можно воспользоваться методом map и хранить группы в дополнительном объекте. Если группа присутствует в объекте, значит из массива нужно удалить элемент, если нет - нет
Например так:
var arr = [
[50, 50, '3'],
[1, 1, '6'],
[50, 50, '9']
];
var res = arr.map(function(el) {
var group = el.slice(0, 2);
if (this[group] === true) {
return group;
}
if (this[group]) {
this[group].splice(2, 1);
this[group] = true;
return group;
}
return this[group] = el;
}, {})
console.log(res);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости