Сравнение объектов в массиве

Подскажите пожалуйста. Есть массив объектов:

[
 {
   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);
→ Ссылка