JavaScript

Задача на логику в js

Помогите, пожалуйста, решить не получается просто вообще

Нужно чтобы в массиве объектов оставались уникальные свойства со значениями значения

показал в коде примеры, что должны выдаваться

https://codesandbox.io/s/small-browser-rpw9mz?file=/src/index.js

пример
[
{ name: "Gleb", age: 1, test: 6 },
{ name: "Gleb", age: 2, test: 6 },
{ name: "Gleb", age: 6, test: 6 }
]
Должно получиться [{ age: 1}, { age: 2 }, { age: 6 }]

если у этого имени во всех обьктах одинаковое значение мы удалляем, если нет, то оставляем
 function getRem(arr) {
let keys = Object.keys(arr[0]).filter(k => new Set(arr.map(r => r[k])).size != 1);
return arr.map(r => keys.reduce((o, k) => (o[k] = r[k], o), {}));
}
Говнокод, но вроде бы работает.
Сначала выбираем ключи, содержащие не одно значение.
Потом по этим ключам формируем возвращаемый массив.
Сергей Бычков
Сергей Бычков
82 852
Лучший ответ
Евгений Мозговой Для чего в шифровании нужен ключ?
 let a=[  
{ name: "Gleb", age: 1, test: 6 },
{ name: "Gleb", age: 2, test: 6 },
{ name: "Gleb", age: 6, test: 6 }
].map(i=>i['age']);
let s=Array.from(new Set(a)).map(i=>{return {age:i}});
console.log(s);//[{age: 1},{age: 2},{age: 6}]
Лев Кикбаев
Лев Кикбаев
20 413
Алексей Петров привязка к имени, в кодесендбоксе показал больше примеров
Для решения этой задачи можно использовать метод `reduce()`. Вот как я бы это реализовал:

```javascript
const arr = [
{ name: "Gleb", age: 1, test: 6 },
{ name: "Gleb", age: 2, test: 6 },
{ name: "Gleb", age: 6, test: 6 }
];

const uniqueProps = arr.reduce((acc, cur) => {
// получаем массив из объекта текущего элемента, содержащий только ключи и их значения
const props = Object.entries(cur).map(([key, value]) => ({ [key]: value }));
// пробегаемся по каждому свойству текущего элемента и добавляем его в аккумулятор, если оно уникально
props.forEach(prop => {
const key = Object.keys(prop)[0];
const value = Object.values(prop)[0];
const exists = acc.some(obj => obj.hasOwnProperty(key) && obj[key] === value);
if (!exists) acc.push(prop);
});
return acc;
}, []);

// выводим только ключи "age"
const result = uniqueProps.map (obj => ({ age: obj.age }));
console.log(result); // [{ age: 1 }, { age: 2 }, { age: 6 }]
```

В этом примере мы:

1. Используем метод `reduce()` для прохода по всем элементам массива `arr`.
2. Внутри метода `reduce()` мы:

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

3. Получаем итоговый массив, содержащий только ключи "age".
Алексей Петров привязка к имени получаеться "age"
Алексей Петров не работает с такими примерами

вставляем [
{ name: "Gleb", age: 1, test: 6 },
{ name: "Gleb", age: 2, test: 6 },
{ name: "Gleb", age: 6, test: 6 }
]
получаем [{ age: 1}, { age: 2 }, { age: 6 }]

вставляем [
{ hello: "hello", value: 1 },
{ hello: "hello", value: 2 },
{ hello: "hello", value: 2 }
]
получаем [{ value: 1}, { value: 2 }, { value: 2 }]

вставляем [
{ chanel: "tes", value: 3 },
{ chanel: "tes", value: 3 },
{ chanel: "russian", value: 3 }
]
получаем [{ chanel: "tes"}, { chanel: "tes" }, { chanel: "russian" }]