Я бегу в странный сбой. У меня есть немного кода, в котором я запускаю массив массивов, захватывая кучу названий городов и объединяя их все вместе. Мне нужно удалить дубликаты из готового списка. Это должно быть довольно просто. Используйте подсчет, чтобы выяснить, в каком городе более одного экземпляра, а затем сплайсируйте их. Мой возвращенный массив не выходит правильно, хотя и я не уверен, почему. Может ли кто-нибудь определить, что я делаю неправильно?Weird hiccup удаление дубликатов из массива
const input = [
{
name: "ACH2000",
year: 2005,
cities: ['Chicago', 'New York', 'Ames', 'Columbus'],
ages: [12, 32, 2, 51]
},
{
name: "FXG3000",
year: 2008,
cities: ['Chicago', 'Joliet', 'Plymouth', 'Dallas'],
ages: [12, 32, 2, 51]
},
{
name: "GTG1234",
year: 2012,
cities: ['Indy', 'Tampa', 'Houston', 'Dallas'],
ages: [12, 32, 2, 51]
}
];
function getUniqueCities(data){
let citiesInArray = data.map(function(item){ return item.cities });
let concatCities = [].concat.apply([], citiesInArray);
let count = {};
for(let i = 0; i< concatCities.length; i++) {
let num = concatCities[i];
count[num] = count[num] ? count[num]+1 : 1;
if(count[num] > 1){
console.log('bad',num);
concatCities.splice(num, 1);
} else {
console.log('good',num);
}
}
console.log(count);
console.log(concatCities);
}
getUniqueCities(input);
Вам действительно нужно знать, какие города появились более одного раза, или достаточно просто вернуть список без дубликатов? В любом случае, подумайте о том, что происходит с индексами элементов в массиве * после того, как * вы являетесь элементом '.splicing()' out ... – nnnnnn
который является возвращенным массивом? 'console.log (concatCities)' дает уникальные города? –
@nnnnnn Просто список без дубликатов. Думаю, у вас есть точка в указателях. Я думаю, что их сплайсинг является причиной моей проблемы. –