2017-11-07 2 views
0

Ich habe Jahreszeiten Objekt und selectedSeasonIds, die Daten enthält, ob die ausgewählte Taste ausgewählt ist oder nicht.So finden Sie ausgewählte Objekte aus einem Objekt

Ich Refactoring das Array, um Datenstruktur für bessere Leistung zu objektieren.

Ich will nur ausgewählte Saison machen, während ich diese Daten haben

seasons = {30: 'Fall', 31: 'Spring', 32: 'All'} 

selectedSeasonIds = {30: true, 31: false, 32: true} 

let output = selectedSeasonIds.???? 
// {30: 'Fall', 32: 'All'} <- This is my goal 

verwendete ich die Wähler die ausgewählten Objekte auszuwählen. Aber ich sehe keinen Nutzen davon. Bitte zögern Sie nicht, meinen Code zu verwenden oder einen besseren zu erstellen. Hier ist mein Ausschnitt meines Codes

Hier ist mein Selektor.

const getSeasons = (seasons, selectedSeasonIds) => { 
    const selectedSeasons = _.filter(
    seasons, 
    season => _.includes(selectedSeasonIds, season.id) 
); 
    return selectedSeasons; 
} 

Ich bin immer ausgewählte Objekte aus Selektor

selectedSeasons = SelectedSeasonsSelector(this.state) << getting selector 
if(selectedSeasons.length==0) { 
    return '-' 
} 
let seasonList = selectedSeasons.map((season) => { 
    return ' '+season.value; 
}) 
return seasonList 

Dank !!!

+0

Warum sollte ein Objekt Nachschau sein performanter als ein Array Look-up? – Teemu

+0

Weil das Nachschlagen von Objekten viel schneller ist als das Suchen nach Arrays. Ich hatte ein Problem mit langsamer Touchable Opacity. Hoffentlich nach dem Refactoring löst es das Problem :) –

+0

Ich bin mir ziemlich sicher, dass es nicht schneller ist, in JS ist aber alles möglich. – Teemu

Antwort

1

Sie können array#reduce verwenden und eine Bedingung setzen, um nur die Werte in der Ausgabe hinzuzufügen, die true in selectedSeasonIds haben.

const seasons = {30: 'Fall', 31: 'Spring', 32: 'All'}; 
 
const selectedSeasonIds = {30: true, 31: false, 32: true}; 
 
let output = Object.keys(selectedSeasonIds).reduce((r,k) => { 
 
    if(selectedSeasonIds[k]) 
 
    r[k] = seasons[k] || ''; 
 
    return r; 
 
}, {}); 
 
console.log(output);

+1

Danke Mann. sehr gute Idee. –

+0

Können Sie erklären, was das ist? –

+1

'r' ist das Akkumulatorobjekt, das den Schlüsselwert speichert. 'k' ist die Taste in' selectedSeasonIds'. –

0

Die Schlüssel in einem Objekt zugänglich sind Eigenschaften und können wie so erhalten werden:

selectedSeasonIds = {30: true, 31: false, 32: true} 
Object.keys(selectedSeasonIds); //Gets an array of keys 
for (let key in selectedSeasonIds){//Iterate through the keys}; 

Danach sollte es trivial sein, die ausgewählten Jahreszeit zuzugreifen.

+0

Danke für Ihre Eingabe, aber es ist schwer, dies als eine vollständige Antwort zu betrachten. –

Verwandte Themen