2016-12-03 1 views
10

Ich mag nicht Object.entries(object).map((key, i) verwenden, weil ich herausgefunden habe, dass dies eine experimentelle Technologie von ECMAScript 7 ist und ich denke, dass etwas in der Produktion schief gehen kann. Gibt es eine alternative JavaScript-Alternative?React.js richtiger Weg zum Iterieren über Objekt anstelle von Object.entries

Ich habe keine Probleme mit Werten von Name, Preis, Beschreibung, weil ich genau weiß, wo sie gerendert werden sollen und ich kann mit Populate.key zugreifen, aber für die Eigenschaften muss ich über Objekt lesen und beide Schlüssel rendern und Wert.

Ich habe versucht, Object.keys(priceChars).map(function(key, i) zu verwenden, aber nicht verstanden, wie Schlüssel von Wert zu trennen. Wie es war, Rendering "Leistung 500", aber ich brauche Performance-Wort, um in einer Icon-Klasse zu sein, und 500 ist ein tatsächlicher Wert angezeigt werden.

Meine JSON Struktur

const Populate = { 
    'name': "Product", 
    'price': "1000", 
    'description': "Product description", 
    'characteristics': { 
    'performance': '500', 
    'pressure': '180', 
    'engine': '4', 
    'size': '860*730*1300', 
    'weight': '420' 
    } 
} 

Und Komponente

class PriceBlock extends Component { 
    render() { 
    const {priceName, priceDesc, priceVal, priceChars} = this.props; 
    const characteristics = Object.entries(priceChars).map((key, i) => { 
     return (
     <div className="price__icon-row" key={i}> 
      <i className={'ico ico-' + key[0]}></i> <span>{key[1]}</span> 
     </div> 
    ); 
    }); 
    return (
     <div className="col-5 price__block"> 
     <div className="price__name">{priceName}</div> 
     <div className="price__description">{priceDesc}</div> 
     <div className="price__icons"> 
      {characteristics} 
     </div> 
     <div className={ managePriceClass(priceVal) }>{priceVal}</div> 
     </div> 
    ); 
    } 
} 
+1

@Endless: Diese Frage hat nichts grundsätzlich mit zu reagieren. –

+0

Wenn Sie einen Compiler wie Babel verwenden, sollte dies keine Rolle spielen, solange Ihre Konfiguration richtig eingestellt ist. – Dom

Antwort

42
a = { 
    a: 1, 
    b: 2, 
    c: 3 
} 

Object.keys(a).map(function(keyName, keyIndex) { 
    // use keyName to get current key's name 
    // and a[keyName] to get its value 
}) 
+0

Danke, @nadavvadan! –

+3

Sehr elegante und prägnante Lösung. Ich sollte jedoch beachten, dass der Zugriff über a.keyName zu einem Fehler führt, da im Objekt a tatsächlich kein Schlüssel namens "keyName" vorhanden ist. Halten Sie sich lieber an einen [keyName], wenn Sie auf den Wert – tormuto

+0

zugreifen Oh, wie habe ich das nicht bemerkt. Danke @tormuto! – nadavvadan

Verwandte Themen