Подскажите как перебрать массив объектов
Подскажите как лучше перебрать такой массив объектов, чтобы в итоговую переменную сохранились только уникальные user_id (в виде массива id)?
Имеем такого вида объект:
{
21: [{id: 1, user_id: 1}, {id: 2, user_id: 2}],
45: [{id: 3, user_id: 2}, {id: 4, user_id: 3}],
}
В итоге должно получиться что-то типа того console.log(ids); // [1, 2, 3]
Использую ES6, jquery не использую.
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Можно так
let arr = {
21: [{id: 1, user_id: 1}, {id: 2, user_id: 2}],
45: [{id: 3, user_id: 2}, {id: 4, user_id: 3}],
};
let result = [...Object.values(arr).reduce( (acc, subArray)=>{ subArray.forEach(item=>acc.add(item.user_id)); return acc}, new Set([]))];
console.log(result);
или по короче
let arr = {
21: [{id: 1, user_id: 1}, {id: 2, user_id: 2}],
45: [{id: 3, user_id: 2}, {id: 4, user_id: 3}],
};
let result = [...Object.values(arr).reduce((a,s)=>(s.forEach(i=>a.add(i.user_id)),a),new Set())];
console.log(result);
или без reduce ещё короче
let arr = {
21: [{id: 1, user_id: 1}, {id: 2, user_id: 2}],
45: [{id: 3, user_id: 2}, {id: 4, user_id: 3}],
};
let result = [...new Set(Object.values(arr).map(s=>s.map(i=>i.user_id)).flat())];
console.log(result);
Автор решения: Bear Vorkuta
→ Ссылка
let ids = new Set()
let obj = {
21: [{id: 1, user_id: 1}, {id: 2, user_id: 2}],
45: [{id: 3, user_id: 2}, {id: 4, user_id: 3}],
}
for (let key in obj)
{
obj[key].forEach(el => ids.add(el.user_id))
}
console.log(Array.from(ids))