2017-02-03 62 views
4

我從嵌套循環推不同的值對象,導致這樣的事情:轉換數組key/value對

obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7]; 

,但我想它返回這樣的:

obj = [{"blue": 1}, {"red": 4}, {"yellow": 2}, {"green": 7}]; 

我必須手動構建該語法還是有更快的方法?

回答

2

使用一個簡單的for循環。

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7]; 
 

 
var res = []; 
 

 
for (var i = 0; i < obj.length; i += 2) { 
 
    var o = {}; 
 
    o[obj[i]] = obj[i + 1]; 
 
    res.push(o); 
 
} 
 

 
console.log(res);


Array.from()使用方法的ES6溶液。

let obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7]; 
 

 
console.log(Array.from({ length: obj.length/2 }, (_, i) => ({ [obj[2 * i]]: obj[2 * i + 1] })));

1

利用for循環acieve像

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7]; 
 

 
var newObj = [] 
 
for(var i = 0; i < obj.length; i+=2) { 
 
    var temp = {}; 
 
    temp[obj[i]] = obj[i + 1]; 
 
    newObj.push(temp); 
 
    
 
} 
 
console.log(newObj);

0

結果您可以使用此

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7]; 
    var newObj = []; 
    var itemValue,itemName = ''; 
    $(obj).each(function(index, item){ 
    if(index % 2 == 0){ 
     if(itemName != ''){ 
     var newObjEle = {}; 
     newObjEle[itemName] = itemValue; 
     newObj.push(newObjEle); 
     } 
     itemName = item; 
    } 
    else{ 
     itemValue = item 
    } 
    }) 
    console.log(newObj); 

Working fiddle

0

一種方法是用空JSON對象數組初始化結果,然後遍歷它以填充對象。

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7]; 
 

 
var result = Array.apply(null, Array(obj.length/2)).map(i => ({})); 
 
result.forEach((c, i, a) => (a[i][obj[2 * i]] = obj[2 * i + 1])); 
 

 
console.log(result);

0

檢查這一點,

obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7]; 
result = []; 
for (i = 0; i < obj.length; i++) { 
    if (i % 2 == 0) { 
    temp = {}; 
    temp[obj[i]] = obj[i + 1]; 
    result.push(temp); 
    } 
} 
console.log(result); 

工作jsfiddle

試試看,它會解決你的問題。