Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Underline.js-数组到具有相同键的对象_Javascript_Angularjs_Underscore.js - Fatal编程技术网

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

Javascript Underline.js-数组到具有相同键的对象,javascript,angularjs,underscore.js,Javascript,Angularjs,Underscore.js,我需要将其转换为: "colors":["pink", "Blue"] 或者仅仅是这个 ["pink", "Blue"] 进入这个 [{ colors: "pink" }, { colors: "blue" }] 为了能够在AngularJS中使用它。是否有任何方法可以使用下划线.js完成此操作?提前谢谢 下划线提供了\.map()方法,该方法允许您完成所需的任务 var arr = ['pink','blue']; var hash = _.map(arr, function(color

我需要将其转换为:

"colors":["pink", "Blue"]
或者仅仅是这个

["pink", "Blue"]
进入这个

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

为了能够在AngularJS中使用它。是否有任何方法可以使用下划线.js完成此操作?提前谢谢

下划线提供了
\.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 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 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(…)
)。

必须使用下划线.js吗?不,我一直在尝试使用下划线.js,因为我是Javascript新手,但我想使用简单的Javascript是可以的:)你没有完全错,但使用
map()是惯用的方法
在这种情况下,我已将另一个标记为正确,但非常感谢您的帮助@这是漫长的一天,我已经更正了代码:)@Matt虽然map在语法上看起来更好,但实际上它在性能上是相等的,如果不是更快一点的话。而最快的可能是一个“正常”的loop@FranePoljak删除我先前的评论以确认更正。我在这些情况下运行了一个快速性能测试,forEach位于顶部,然后使用for循环,map位于后面。然而,除非在极其苛刻的性能环境下,否则这种差异不会明显。非常感谢你!谢谢,我想这是一个更普遍的情况!