Нужно убрать с объекта повторяющие имена и вывести его Должно выводить объект без 1 Beyonce а не выводит ничего Если добавить массив то работает а с объектом не хочет
var arrayOfObjects = [
{
name: 'Diana',
born: 130000, // Mon, Jul 15 2013
num: 4,
sex: 'female'
},
{
name: 'Beyonce',
born: 1363000, // Wed, Apr 24 2013
num: 2,
sex: 'female'
},
{
name: 'Beyonce',
born: 1363000, // Wed, Apr 24 2013
num: 2,
sex: 'female'
},
{
name: 'Albert',
born: 13000, // Mon, Jun 3 2013
num: 3,
sex: 'male'
},
{
name: 'Doris',
born: 187000, // Sat, Dec 1 2012
num: 1,
sex: 'female'
}
];
var names = arrayOfObjects.slice(0);
var eeee= names.filter(function(item, pos) {
return names.indexOf(item.name) == pos;
})
console.log(eeee);
indexOf сравнивает переданный параметр со всем элементом, так как ты передаешь строку, а элементы это массивы, то ничего не находится, возвращается -1 и так как pos не может быть -1 всегда возвращается false.
для решения достаточно заменить indexOf, на findIndex, который принимает функцию.
var arrayOfObjects = [{
name: 'Diana',
born: 130000, // Mon, Jul 15 2013
num: 4,
sex: 'female'
},
{
name: 'Beyonce',
born: 1363000, // Wed, Apr 24 2013
num: 2,
sex: 'female'
},
{
name: 'Beyonce',
born: 1363000, // Wed, Apr 24 2013
num: 2,
sex: 'female'
},
{
name: 'Albert',
born: 13000, // Mon, Jun 3 2013
num: 3,
sex: 'male'
},
{
name: 'Doris',
born: 187000, // Sat, Dec 1 2012
num: 1,
sex: 'female'
}
];
var names = arrayOfObjects.slice(0);
var eeee = names.filter(function(item, pos) {
return names.findIndex(el => el.name == item.name) == pos;
})
console.log(eeee);
Альтернативным решением может стать проверка наличия конкретного имени, в каком-то на наборе и при его отсутствии добавление и сохранение элемента в результат.
Например:
var arrayOfObjects = [{
name: 'Diana',
born: 130000, // Mon, Jul 15 2013
num: 4,
sex: 'female'
},
{
name: 'Beyonce',
born: 1363000, // Wed, Apr 24 2013
num: 2,
sex: 'female'
},
{
name: 'Beyonce',
born: 1363000, // Wed, Apr 24 2013
num: 2,
sex: 'female'
},
{
name: 'Albert',
born: 13000, // Mon, Jun 3 2013
num: 3,
sex: 'male'
},
{
name: 'Doris',
born: 187000, // Sat, Dec 1 2012
num: 1,
sex: 'female'
}
];
var eeee = arrayOfObjects.reduce(function({
map,
res
}, el) {
if (!map[el.name]) { // если элемента с таким именем не было добавляем в результат
map[el.name] = true; // помечаем что такой элемент был
res.push(el);
}
return {
map,
res
};
}, {
map: {},
res: []
}).res;
console.log(eeee);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости