Underscore.js - 数组到具有相同键的对象

Underscore.js - array to object with same key

我需要转换这个:

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

或者只是这个

["pink", "Blue"]

进入这个

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

为了能够在AngularJS中使用。有什么办法可以使用 underscore.js 来实现吗?提前致谢!

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

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

然而,undercore 的 map 方法只是对 javascript 中原生 Array#map 方法的简单包装,可以按如下方式使用:

var arr = ['pink', 'blue'];
var hash = arr.map(function(color){ return {colors: color}; });
var newArray = new Array();
colors.forEach(function(item) {
    newArray.push({colors: item});
});

一般来说,如果你有这样的对象:

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(...))。