2016-06-26 43 views
0

所以我有一個var data與結果數組JSON值是這樣的:組結果值

[ 
    {"vehicle_id":"1", "model_name":"sedan"}, 
    {"vehicle_id":"2", "model_name":"elf"}, 
    {"vehicle_id":"3", "model_name":"truck"} 
] 

我想設置這樣的新的變量每個值:

var newdata = [ 
    { 
     text: Obj.model_name 
     value: Obj.vehicle_id 
    }, 
    { 
     text: Obj.model_name 
     value: Obj.vehicle_id 
    }, 
    ...... 
]; 

如何在上面的變量上設置每個值?

我已經嘗試這個辦法:

var newdata = [ 
    $.each(data, function(index, Obj){ 
     { 
      text: Obj.model_name 
      value: Obj.vehicle_id 
     } 
    }) 
]; 

,但似乎它不工作,任何人都可以有這樣的情況下最好的做法?

回答

5

使用.map

var newData = data.map(function(obj) { 
    return { 
    text: obj.model_name, 
    value: obj.vehicle_id, 
    }; 
}); 

與您的代碼的問題是,它沒有做任何事情。雖然$.each將迭代數組,但函數不會改變元素。它甚至不會創建一個新對象,您只需創建一個帶有兩個labelsblock。你可以認爲它相當於

for (var i = 0; i < arr.length; i++) { 
    arr[i].model_name; 
    arr[i].vehicle_id; 
} 

即你只是引用屬性,但沒有對這些值做任何事情。

+0

感謝它的成功! –

3

只需使用map()

var newData = data.map(function(item) { 
    return { 
     text: item.model_name, 
     value: item.vehicle_id 
    }; 
}); 

MDN

0

使用 '地圖',而不是 '每個'。 或使用'$ .each'像這樣:

var newdata = []; 
$.each(data, function(index, Obj){ 
    newdata.push({ 
     text: Obj.model_name, 
     value: Obj.vehicle_id 
    }) 
});