2016-10-14 61 views
2

如何從JSON到JSON轉換:壓扁

data1 = [ 
    { "label": "Some Label", "value": '018'}, 
    { "label": "Another Label", "value": '020'} 
] 

得到

data2 = { 
    "018": "Some Label", 
    "020": "Another Label" 
} 

應該在for循環看起來怎麼樣?

for (let item of data){ 
    .... 
} 

回答

3

如果你想堅持使用for..of循環,你可以這樣做:

var data2 = {}; 

for (let item of data) { 
    data2[item.value] = item.label 
} 
3

您可以使用reduce()並返回對象。

var data = [ 
 
{ "label": "Some Label", "value": '018'}, 
 
{ "label": "Another Label", "value": '020'} 
 
] 
 

 
var result = data.reduce(function(r, e) { 
 
    r[e.value] = e.label; 
 
    return r; 
 
}, {}) 
 

 
console.log(result)

+0

是跨瀏覽器兼容? – Lonely

+0

你可以在mdn上看到'瀏覽器兼容性' –

+0

爲什麼在'map'上使用'reduce'? – evolutionxbox

3

你可以使用Array#forEach與價值觀爲重點打造的對象。

var data1 = [{ label: "Some Label", value: '018'}, { label: "Another Label", value: '020'}], 
 
    data2 = {}; 
 

 
data1.forEach(function (a) { 
 
    data2[a.value] = a.label; 
 
}); 
 

 
console.log(data2);

+0

它是跨瀏覽器兼容的嗎? – Lonely

+0

它實際上是[支持](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Browser_compatibility)通過任何瀏覽器。 –

+0

@Lonely - 總是閱讀文檔 – evolutionxbox

1

嘗試......

var data1 = [{ 
 
    "label": "Some Label", 
 
    "value": '018' 
 
}, { 
 
    "label": "Another Label", 
 
    "value": '020' 
 
}]; 
 
var data2 = {}; 
 
for (i = 0; i <= data1.length - 1; i++) { 
 
    data2[data1[i].value] = data1[i].label; 
 
} 
 
console.log(data2);

1

試試這個,它應該工作正常

/** declare data1 */ 
 
const data1 = [ 
 
    { 
 
    label: 'Some Label', 
 
    value: '018' 
 
    }, 
 
    { 
 
    label: 'Another Label', 
 
    value: '020' 
 
    } 
 
] 
 

 
/** declare data2 */ 
 
const data2 = {} 
 
    
 
/** loop data1 to get data2 value */ 
 
data1.forEach(item => { 
 
    data2[item.value] = item.label 
 
}) 
 

 
console.log(data2)