Próbuję usunąć duplikaty z danych przekazywanych z węzła. Funkcja pobierania danych to:
getProducts(_) {
const dev = "http://localhost:3008/api"
fetch(dev)
.then(res => res.json())
.then(data => {
/* this.setState
({
data: data.data
})
})*/
this.removeDuplicates(data)
})
}
Moja funkcja usuwania duplikatów to:
removeDuplicates(arr){
let array = arr.data
console.log(array)
array.sort((a,b) => {return a.webservice - b.webservice})
let length = array.length
for ( var i = 0;
i < length;
i++ ){
let x = i+1
console.log(array[x].webservice)
/* if (array[i].webservice == array[x].webservice){
delete array[i]
}*/
// console.log(array)
}
}
Kiedy console.log data
- zwraca tablicę obiektu zgodnie z oczekiwaniami. Kiedy console.log array[i].webservice
- zwraca usługę sieciową Ale kiedy próbuję zrobić to samo dla array[x].webservice
(czyli i + 1), zwraca array [x] jest niezdefiniowanym błędem krytycznym, ale nadal console.logsuje dane.
Czy coś mi umyka?
2 odpowiedzi
Przyjrzyj się bliżej tej części kodu:
for (var i = 0; i < length; i++ ){
let x = i+1;
// ...etc....
}
Powiedzmy, że długość tablicy wynosi 3. Gdy i = 2, jest mniejsze niż 3, więc pętla zostanie wykonana; x = i + 1 = 2 + 1 = 3. Następnie próbujesz uzyskać dostęp do array[3]
- ale tablica o długości 3 ma tylko wartość od 0 do 2! To będzie próba uzyskania dostępu poza granice twojej tablicy, stąd błąd.
Możesz usunąć duplikaty z tablicy w następujący sposób:
Zakładając, że Twoje dane są podobne do tego
const data = [
{ webservice: "a" },
{ webservice: "b" },
{ webservice: "c" },
{ webservice: "b" },
{ webservice: "d" },
];
W tym przykładzie element z usługą sieciową o wartości b
i indeksie 3 zostanie wykluczony z powtarzania
const data = [
{ webservice: "a" },
{ webservice: "b" },
{ webservice: "c" },
{ webservice: "b" },
{ webservice: "d" },
];
const output = data.reduce((accumulator, current) => {
if (!accumulator.some(element => element.webservice === current.webservice)) {
accumulator.push(current);
}
return accumulator;
}, []);
console.log(output);
Mam nadzieję, że poprawnie zinterpretowałem Twoje pytanie
const unique = [...new Set(data.map(item => item.webservice))];
data