Имеется массив
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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть расширение ChromeВ при простому запуске html страницы скрипт работает
Ситуация такая: Есть скрипт который загружает файл на сервер, возможно ли сделать так чтобы при выборе файла не надо было нажимать кнопку...
Как можно реализовать именно математическое действие а не просто складывать текст вместе? Тема вроде простая но не могу понять в чем дело,...