Имеется массив
var a = [
[
"url",
"url",
"url",
"http://mall.aliexpress.com/"
],
[
"url",
"url",
"url",
"http://yootube.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://yootube.com/"
],
[
"url",
"url",
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://mall.aliexpress.com/"
]
];
Необходимо удалить массив который совпадает по доменному имени. Как это сделать?
for (var i = 0; i < a.length; i++) {
for (var j = i + 1; j < a.length; j++) {
if (a[i][3] == a[j][3]) {
a.splice(i, 1);
i = 0;
j = 0;
}
}
}
var a = [
[
"url",
"url",
"url",
"http://mall.aliexpress.com/"
],
[
"url",
"url",
"url",
"http://yootube.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://yootube.com/"
],
[
"url",
"url",
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://mall.aliexpress.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://mall.aliexpress.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://yootube.com/"
]
];
for (var i = 0; i < a.length; i++) {
for (var j = i + 1; j < a.length; j++) {
if (a[i][3] == a[j][3]) {
a.splice(i, 1);
i = 0;
j = 0;
}
}
}
console.log(a)
Внешний цикл делает обход по всем элементам массива, внутренний идёт от i-того элемента до конца, и добавляет в массив все индексы для удаления, а затем проходим по исходному массиву и копируем элементы в новый массив, но те, которые не вошли в indexes. Результат будет в newArr.
indexes = []
for (var i = 0; i < a.length; i++) {
for (var j = i + 1; j < a.length; j++) {
if (a[i][3] == a[j][3]) {
indexes.push(j);
}
}
}
newArr = []
for (var i = 0; i < a.length; i++) {
if (indexes.indexOf(i) == -1) {
newArr.push(a[i]);
}
}
Можно воспользоваться функцией reduce
var result = a.reduce(function(acc, cur) {
if (!acc.map[cur[3]]) { // если проверяемого элемента еще не было
acc.map[cur[3]] = true; // пометим его, как существующий,
acc.result.push(cur); // добавим в результирующий массив
}
return acc; // вернем аккумулятор
}, {
map: {}, // хранит уникальные поля
result: [] // хранит результирующий массив
}).result; // сохраняем в переменную результирующий массив
Пример в работе:
var a = [
[
"url",
"url",
"url",
"http://mall.aliexpress.com/"
],
[
"url",
"url",
"url",
"http://yootube.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://yootube.com/"
],
[
"url",
"url",
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://mall.aliexpress.com/"
]
];
var result = a.reduce(function(acc, cur) {
if (!acc.map[cur[3]]) {
acc.map[cur[3]] = true;
acc.result.push(cur);
}
return acc;
}, {
map: {},
result: []
}).result;
console.log(result);
.as-console-wrapper {
top: 0;
max-height: 100% !important;
}
Если нужно проверять полное совпадение массивов, вместо проверки конкретного элемента, можно отсортировать массив привести к сторке - отсортированные массивы с одинаковыми элементами дадут одинакокую строку:
var result = a.reduce(function(acc, cur) {
var key = [...cur].sort();
if (!acc.map[key]) {
acc.map[key] = true;
acc.result.push(cur);
}
return acc;
}, {
map: {},
result: []
}).result;
Пример:
var a = [
[
"url",
"url",
"url",
"http://mall.aliexpress.com/"
],
[
"url",
"url",
"url",
"http://yootube.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://yootube.com/"
],
[
"url",
"url",
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://ru.stackoverflow.com/"
],
[
"url",
"url", // этот массив необходимо удалить так как доменные имена совпадают
"url",
"http://mall.aliexpress.com/"
]
];
var result = a.reduce(function(acc, cur) {
var key = [...cur].sort();
if (!acc.map[key]) {
acc.map[key] = true;
acc.result.push(cur);
}
return acc;
}, {
map: {},
result: []
}).result;
console.log(result);
.as-console-wrapper {
top: 0;
max-height: 100% !important;
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники