2016-07-14 60 views
0

我有一個對象:JS:將對象中的特定值轉換爲數組?

var obj = 
[ 
{ 
    "value": "aep", 
    "label": "AEP" 
}, 
{ 
    "value": "cap", 
    "label": "CAP" 
}, 
{ 
    "value": "casl", 
    "label": "CASL" 
} ] 

我想標籤的值只轉換到一個數組,這樣最終的結果是:

["AEP", "CAP", "CASL"] 

如何我只得到了標籤值轉換成數組?

+3

提示#1的地圖功能:嘗試環路('for') - 在這裏你會遍歷數組和'.push()'到另一個結果數組。 – zerkms

+5

@community:請讓他們自己解決這個問題,不要發佈完整的代碼。謝謝。 – zerkms

+0

這不是一個對象......它包含對象。 – theblindprophet

回答

0

這是一個功能性的解決方案,而不是最簡單的解決方案,您可能想要參考@ theblindprophet的答案來解決這個問題。

很容易的任務在功能的方式來完成:

var labels = obj.map(function(inner) { return inner.label }); 

怎樣一種方式這樣一個問題:你需要考慮如何改變你有你想要的數據的數據。在這種情況下,您有一個對象數組,並且您想要將此對象數組轉換爲放置在該對象內的一個字符串數組。

在陣列上面的代碼循環,並返回要用於陣列的當前元素的值,在使用過程中(map

+3

有人不能實現一個簡單的循環,你建議一個基於hof的解決方案。你真的認爲它教會了他們什麼? – zerkms

+0

@zerkms是的,它教給他們關於'Array.prototype.map'方法。你爲什麼不教我們一些事情並解釋HOF的含義? –

+0

免責聲明:我後來添加了解釋。 – markusthoemmes

1

首先建立一個新的數組:obj不是一個對象,它是一個因爲父括號是[]而不是{}。但是,我會保持這個名字一樣。這可能會造成您一些混淆,例如

var object = {}; 
var array = []; 
var arrayOfObjects = [{},{},{}]; 
var objectOfArrays = {array1: [],array2: [],array3: []}; 

要循環的數組,你可以使用一個for循環:

// new array 
var newArray = []; 
// iterates over each index in the array 
for(var i=0; i<obj.length; i++) { 
    // Access the specific index, then access its `label` property 
    // Push into `newArray` 
    newArray.push(obj[i].label); 
} 

console.log(newArray); 

Codepen:http://codepen.io/theblindprophet/pen/RRxVba

+0

'objectOfArrays'聲明是無效的語法;儘管我很欣賞啓發式,但您正在提出一個關於語法的具體觀點。令人困惑的是,工作代碼部分中的'obj'沒有在前面的部分引用'obj',而是在OP的問題中引用'obj'。 –

+0

我的歉意,我看到我做了什麼,更好? – theblindprophet

+0

使用地圖是最簡單的解決方案: obj.map(function(inner){return inner.label}); –

0

使用for循環

var out = []; 
for (var i = 0, len = obj.length; i < len; i++) { 
    out.push(obj[i].label); 
} 
console.log(out); 
+1

爲什麼'len = obj.length;我 theblindprophet

+0

@theblindprophet在2016年人們仍然認爲它有任何區別。 – zerkms

+0

你的評論很模糊(暗示挖苦)。我想知道這是否更有效。 – theblindprophet

0

其簡單。您可以使用JavaScript陣列

var obj = 
[ 
{ 
    "value": "aep", 
    "label": "AEP" 
}, 
{ 
    "value": "cap", 
    "label": "CAP" 
}, 
{ 
    "value": "casl", 
    "label": "CASL" 
} ] 

var arr = obj.map(function(data){return data.value}); 
+1

你的意思是'返回data.label'。 – akinuri