Сравнение объектов в массиве
Подскажите пожалуйста. Есть массив объектов:
[
{
name: Test1,
id: 123
},
{
name: Test2,
id: 123
}
{
name: Test3,
id: 123
}
]
Нужно вернуть id только в том случае если он одинаковый во всех объектах в массиве... иначе вернуть false.
Ответы (3 шт):
Автор решения: DiD
→ Ссылка
Решение простое.
function f(array){
return !array.length ? false :
array.every(element =>
element.id == array[0].id
) ? array[0].id :
false;
}
Автор решения: entithat
→ Ссылка
Смысл прост: функция every проверяет проходят ли все елементы массива проверку, в нашем случае проверку на схожесть к первому элементу.
function isEqual(obj) {
return obj.length && obj.every(e => e.id === obj[0].id) ? obj[0].id : false;
}
const ex1 = [{id: 123}, {id: 123}, {id: 123}];
const ex2 = [{id: 123}, {id: 123}, {id: 13}];
const ex3 = [];
console.log(isEqual(ex1));
console.log(isEqual(ex2));
console.log(isEqual(ex3));
Можно еще с помощью new Set().
function isEqual(obj) {
return new Set(obj.map(e => e.id)).size === 1 ? obj[0].id : false;
}
isEqual([]) // false
isEqual([{id: 123}, {id: 123}, {id: 123}]) // 123
Автор решения: teran
→ Ссылка
с reduce еще можно сделать, громоздко, конечно, немного из-за числа параметров.
const data = [
{ name: 'Test1', id: 123 },
{ name: 'Test2', id: 123 },
{ name: 'Test3', id: 124 }
];
let result = data.reduce((acc,v,idx,arr) => acc && v.id == arr[0].id, true);
console.log(result);
или так
result = data.reduce((acc,v,idx,arr) => !idx || v.id == arr[idx-1].id);