У меня есть массив имен, у которых есть дубликаты.
let arr = ['John', 'Jack', 'John', 'Jack', 'Jack', 'June', 'June'];
Я хочу создать новый массив с некоторыми дублирующимися элементами, указав экземпляр, в котором они встречаются.
Например, я хочу, чтобы массив содержал только второе вхождение Джона, Джека и Джун.Массив будет выглядеть следующим образом:
'John', 'Jack', 'June'
Для этого я объявил объект ni
и перебрал arr
для добавления свойств к объекту, соответствующему каждому имени;свойство будет содержать значение массива, содержащего каждый индекс, по которому встречается имя.
let ni = {};
for(let i = 0; i < arr.length; i++) {
let name = arr[i];
if(nc.hasOwnProperty(name)) {
ni[name].push(i);
} else {
ni[name] = [i];
}
}
console.log(ni);
// > Object { John: Array [0, 2], Jack: Array [1, 3, 4], June: Array [5, 6] }
В моей функции Array.filter я проверяю, равен ли индекс элемента индексу 1 свойства объекта, соответствующегос тем же именем.
let newArr = arr.filter(function(name) {
if(ni.hasOwnProperty(name)) {
return arr.indexOf(name) === ni[name][1];
}
});
Это должно вернуть John
в index 2
, Jack
в index 3
и June
в index 6
в новый массив.
Однако это не сработало.Запись newArr
на консоль приведет к выводу массива, полностью неизменного от оригинала.
> Array ["John", "Jack", "John", "Jack", "Jack", "June", "June"]