Найти дубликат в объекте и получить значение поля

Станислав
На сайте с 27.12.2009
Offline
258
633

Не пойму как осуществить задуманное

Есть к примеру объект с полями

var obj = {

"mod": [ { "id": '5417fb840ad5857d1f048ef9',
"url": "one",
"images": [ ['pic1', 'pic2', 'pic3', 'pic4'],
['pic10', 'pic20', 'pic30', 'pic40']
]
},
{
"id": '5417fb840ad5857d1f048ef8',
"url": "one",
"images": [ ['pic1', 'pic2', 'pic3', 'pic4'],
['pic10', 'pic20', 'pic30', 'pic40']
]
},
{
"id": '5417fb840ad5857d1f048e10',
"url": "one",
"images": [ ['pic1', 'pic2', 'pic3', 'pic4'],
['pic10', 'pic20', 'pic30', 'pic40']
]
},
{
"id": '5417fb840ad5857d1f048e11',
"url": "two",
"images": [ ['pic5', 'pic6', 'pic7', 'pic8']
]
},
{
"id": '5417fb840ad5857d1f048e12',
"url": "two",
"images": [ ['pic500', 'pic600', 'pic700', 'pic800']
]
}

]
}

Нужно перебрать массив объектов и получить ID в том случае если массив images является дубликатом.

В данном случае нужно получить список ID массивом

['5417fb840ad5857d1f048ef8','5417fb840ad5857d1f048e10']

Возможно ли такое сделать?

В примере эти объекты

{

"id": '5417fb840ad5857d1f048ef8',
"url": "one",
"images": [ ['pic1', 'pic2', 'pic3', 'pic4'],
['pic10', 'pic20', 'pic30', 'pic40']
]
},
{
"id": '5417fb840ad5857d1f048e10',
"url": "one",
"images": [ ['pic1', 'pic2', 'pic3', 'pic4'],
['pic10', 'pic20', 'pic30', 'pic40']
]
},

Являются дубликатами объекта с ID 5417fb840ad5857d1f048ef9

Мы там, где рады нас видеть.
siv1987
На сайте с 02.04.2009
Offline
427
#1

Можно. Сохранить пройденные ключи и проверить если текущего ключа нет в этом массиве. Если есть, значит он повторяется. for > if indexOf + else

Станислав
На сайте с 27.12.2009
Offline
258
#2
siv1987:
Можно. Сохранить пройденные ключи и проверить если текущего ключа нет в этом массиве. Если есть, значит он повторяется. for > if indexOf + else

Я уже два дня с этим мучаюсь, и так и ничего не получилось 🤣

Mad_Man
На сайте с 10.11.2008
Offline
162
#3
Ms-Dred:
Я уже два дня с этим мучаюсь, и так и ничего не получилось 🤣

Второй день лень оторвать жопу от форума и почитать наконец матчасть по жабоскрипту? Судя по хистори полгода подряд уже идут одни и те же вопросы по перебору массивов, JSON'a и прочей фигне, которая разбирается на первых 10 страницах любого справочника.

Настолько впадлу осилить пару страниц, да? Или просто не хватает мозговых способностей даже примерно накидать простейший алгоритм и спросить что в нём не так вместо постоянного выклянчивания готовых солюшенов?

Станислав
На сайте с 27.12.2009
Offline
258
#4
Mad_Man:
Второй день лень оторвать жопу от форума и почитать наконец матчасть по жабоскрипту? Судя по хистори полгода подряд уже идут одни и те же вопросы по перебору массивов, JSON'a и прочей фигне, которая разбирается на первых 10 страницах любого справочника.

Настолько впадлу осилить пару страниц, да? Или просто не хватает мозговых способностей даже примерно накидать простейший алгоритм и спросить что в нём не так вместо постоянного выклянчивания готовых солюшенов?

Жествкий высер... Жена не дала?

Mad_Man
На сайте с 10.11.2008
Offline
162
#5
Ms-Dred:
Жествкий высер... Жена не дала?

Да не, нормально всё. Скучный форум с кучей лентяев, надо периодически набрасывать что-нибудь кроме "чувак, а сам что сделал-то?" и "дык ветка для помощи, а не написания задаром, фрилансеры в соседнем разделе".

Для заказа кода есть соседний раздел, там за еду можно кого-нибудь подобрать. Все остальные варианты предполагают, что вы имитируете из себя программиста, а не заказчика.

siv1987
На сайте с 02.04.2009
Offline
427
#6


function arraysEqual(a1,a2) {
return JSON.stringify(a1) == JSON.stringify(a2);
}

var ids = [], len = obj.mod.length;
for(var i=0; i<len; i++){
var row = obj.mod;
var n = i+1;
if(n < len && ids.indexOf(obj.mod[n].id) == -1){
for(n; n<len; n++){
if(arraysEqual(row.images, obj.mod[n].images)){
ids.push(obj.mod[n].id);
}
}
}
}

alert(ids);
Станислав
На сайте с 27.12.2009
Offline
258
#7
Mad_Man:
дык ветка для помощи, а не написания задаром

Жгете.

Тут нужно перебрать массив, а не написать скрипт на 50-100 строк. Если вы жалеете свои пальчики для столь трудоемкой задачи, то не нужно писать о том что тут лентяев много, а вы один такой трудяга.

Это форум, не хочешь помогать -> проходи мимо. Тут никто никого не принуждает. Ваш бы высер да в ветку апдейтов.

Mad_Man:
Настолько впадлу осилить пару страниц, да?

Для меня это не рядовая задача, я все еще учусь всему. Но не думаю что вам это буде интересно...

siv1987, спс, я по вашему первому посту вчера еще сделал.

1. Создал массив со всеми id

2. Создал еще один массив прогнав данные через фильтр

var used = [];
var clean = arr2.filter(function(obj, i) {
return obj.images[0][0] in used ? 0 : used[obj.images[0][0]] =1;
});

3. Затем удалил все ID дубликаты

function clean(array, array2){
var id = 0, array3 = [];
for (var i = 0; i < array2.length; i++) {
id = array1.indexOf(array2);
if (id < 0) array2.push(array2);
}
return array3;
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий