Нужно убрать с объекта повторяющие имена и вывести его Должно выводить объект без 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);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Недавно "прогуливаясь" по интернету нашел такой сайт Приватный чит для DOTA 2, вы не подумайте игра меня не интересует, меня заинтересовал фон...
Нужно сделать всплывающее окно с reCAPTCHAРекапча ругается на origin окна
Счас она выдает по firstName с удалением повторяемых, а надо еще чтобы с age выдавалоИли как изменить чтобы от tName она везде в функции принимало...