2016-02-15 93 views
2

反對我需要轉換成這樣:Underscore.js - 陣列與相同的密鑰

"colors":["pink", "Blue"] 

或者乾脆此

["pink", "Blue"] 

這個

[{ colors: "pink" }, { colors: "blue" }] 

爲了能夠在AngularJS中使用它。有沒有辦法使用underscore.js來做到這一點?提前致謝!

+0

使用underscore.js是強制性的嗎? – LostMyGlasses

+0

不,我一直在努力做到這一點與underscore.js,因爲我是新的Javascript,但我想用簡單的Javascript確定:) – Joe82

回答

6

Underscore提供了_.map()方法,它可以讓您完成要查找的內容。

var arr = ['pink','blue']; 
var hash = _.map(arr, function(color){ return {colors: color};}); 

然而,undercore的地圖的方法是簡單地圍繞天然Array#map方法在JavaScript中,其可以被用作瘦包裝如下:

var arr = ['pink', 'blue']; 
var hash = arr.map(function(color){ return {colors: color}; }); 
+0

完美的作品。非常感謝! – Joe82

2
var newArray = new Array(); 
colors.forEach(function(item) { 
    newArray.push({colors: item}); 
}); 
+0

你並不嚴格錯誤,但在這種情況下使用'map()'是慣用的 – Matt

+1

我已經標記了另一個正確,但非常感謝您的幫助! – Joe82

+0

@RickyTomatoes已經過了漫長的一天,我已經糾正了代碼:) –

1

一般來說,如果你有一個對象像這個:

var obj = { 
    key1: ['val1_1', 'val1_2'], 
    key2: ['val2_1', 'val2_2'] 
} 

你想要得到這樣的東西:

var arr = [{key1: 'val1_1'}, {key1: 'val1_2'}, {key2: 'val2_1'}, {key2: 'val2_2'}] 

在裏面。

var arr = Object.keys(obj).map(function(key){ 
    return obj[key].map(function(item){ 
     var result = {}; 
     result[key] = item; 
     return result; 
    }) 
}).reduce(function(prevArray, newArray){ 
    return prevArray.concat(newArray); 
}, []); 

或者,如果你想要得到的結果是這樣的:

var arr = [[{key1: 'val1_1'}, {key1: 'val1_2'}], [{key2: 'val2_1'}, {key2: 'val2_2'}]] 

只是刪除最後一部分(.reduce(...)),它串接所有陣列。

+0

謝謝,我想這是一個更一般的情況! – Joe82