2016-02-15 103 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