2016-05-06 87 views
1

我是JavaScript新手,我試圖將數組轉換爲鍵值對。javascript - 隱藏一個數組鍵值對

var arrayA = [{"name":"orange", "value":"1"}, {"name":"banana", "value":"2"}...]

所以最終的結果會是什麼樣子var arrayB = {orange:1, banana:2}

我覺得我可能要在一個循環內使用循環首先拆就,然後又是一個對:分裂,但似乎亂。

謝謝。

回答

0

嘗試使用以下循環:創建與該鍵name一個新對象,並在arrayA

var arrayA = [{"name":"orange", "value":"1"}, {"name":"banana", "value":"2"}...] 
var obj = {} 
$.each(arrayA,function(i,v){ 
obj[v.name] = v.value; 
}); 

https://jsfiddle.net/z8h6omo6/

或每個對象的值value而不jquery的

for(i in arrayA){ 
    obj[arrayA[i].name] = arrayA[i].value; 
    }; 
+1

護理應與'for..in'爲後代在任何另外的繼承屬性的情況下使用。 – roflmyeggo

+0

@roflmyeggo你是什麼意思? – madalinivascu

+1

'for..in'將迭代/ all/properties,包括繼承的屬性。沒有訂單保證,這使得它對陣列更加危險。 – roflmyeggo

0

一個簡單方法是簡單地遍歷數組的長度,設置一個新的Object屬性基於Array在每次通過期間的索引。

var arrayA = [{"name":"orange", "value":"1"}, {"name":"banana", "value":"2"}]; 
var objectA = {}; 
for (var i = 0; i < arrayA.length; i++) { 
    objectA[arrayA[i].name] = arrayA[i].value; 
} 

然後objectA將具有以下結構:

{ 
    "orange": 1, 
    "banana": 2 
} 
+1

這沒有把戲。感謝堆。 – 712sash

0

當我已經做了我的代碼,已經有兩個答案。但我不想放棄,所以我寫這個。

var arrayA = [{"name":"orange", "value":"1"}, {"name":"banana", "value":"2"}]; 

var arr={}; 
for(var i = arrayA.length -1; i>=0; i--){ 
    arr[Object.values(arrayA[i])[0]]=Object.values(arrayA[i])[1]; 
} 

console.log(arr); 

應該在明年的工作,如果沒有,那麼檢查它在今明兩年之後,等好運氣。

0

減少似乎是一個很好的候選人,因爲它會以迭代,並僅訪問次數自己的屬性存在:

var arrayA = [{"name":"orange", "value":"1"}, {"name":"banana", "value":"2"}]; 
 

 
var obj = arrayA.reduce(function(acc, obj) { 
 
    acc[obj.name] = obj.value; 
 
    return acc; 
 
},{}); 
 

 
document.write(JSON.stringify(obj))

0

我會建議使用Array#forEach和對象,因爲減少的回報總是一樣的,這是沒有必要的,因爲只有一個屬性被添加。

var array = [{"name":"orange", "value":"1"}, {"name":"banana", "value":"2"}], 
 
    object = {}; 
 

 
array.forEach(function(a) { 
 
    object[a.name] = a.value; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');