2017-02-21 11 views
0

Ich verwende ReactJS mit React-Bootstrap. Der Service, den ich aufrufen möchte, um mögliche Werte für eine Combobox zu erhalten, gibt ein JSON-Objekt zurück.JavaScript Iterate über Objekt

{"1":"GLOBAL","2":"STORE","3":"COUNTRY","4":"REGION","5":"DISTRICT","6":"CUSTOM_LIST"} 

Ich möchte irgendwie über diese Iterierte drehen und eine SELECT mit den Optionen Wert ist die ganze Zahl erstellen, und der Wert Zeichenfolge zu sein, was angezeigt wird.

Wie kann man damit ein JSON-Objekt zurückgeben, das eine serialisierte Map zu sein scheint.

Antwort

1
const data = { 
    "1":"GLOBAL", 
    "2":"STORE", 
    "3":"COUNTRY", 
    "4":"REGION", 
    "5":"DISTRICT", 
    "6":"CUSTOM_LIST" 
} 

const optionEls = Object.keys(data).map(key => (
    <option value={key}>{data[key]}</option> 
)) 

oder als Komponente empfängt die data als props:

const SelectComponent = ({data}) => (<select> 
    { 
    Object.keys(data).map(key => (
     <option value={key}>{data[key]}</option> 
    )) 
    } 
</select>) 
0

Sie sollten wahrscheinlich in der Lage sein, so etwas wie dies in JSX zu tun:

<select> 
    Array.from(myMap).map(([key, value]) => ({ 
    <option value={key}>{value}</option> 
    })); 
</select> 

wo myMap ist Ihre Struktur JSON .

+0

Bist Du sicher 'Array.from' verwandelt sich diese Struktur in eine richtige Array? Was passiert mit Index 0? –

+0

Laut den Dokumenten sollte es: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/von – Gregg

+0

Welcher Teil der Dokumentation sagt das? Nicht pingelig, ich bin wirklich neugierig, weil deine Lösung eleganter aussehen würde. Aber ich bekomme leere Arrays sowohl in Knoten als auch in Chrome. –

0

Vielleicht kann dieser Ihnen helfen, ich bin einen ähnlichen Ansatz mit https://jsfiddle.net/69z2wepo/70835/

const data = {"1":"GLOBAL","2":"STORE","3":"COUNTRY","4":"REGION","5":"DISTRICT","6":"CUSTOM_LIST"}; 

function getDataToSelect(data){ 
    return _.map(_.keys(data),(key)=>{ 
     return {id:key, text:data[key]} 
    }) 
} 

const SelectElement = (props) => (
     <select> 
     { 
      [<option key={'none'}></option>].concat(props.options.map((opt, idx) => { 
       return <option key={opt.id + '_' + idx} value={opt.id}>{opt.text}</option> 
      })) 
      } 
     </select> 
    ); 

ReactDOM.render(
    <SelectElement options={getDataToSelect(data)} />, 
    document.getElementById('container') 
);