Javascript 从u.map()返回对象

Javascript 从u.map()返回对象,javascript,arrays,object,map,underscore.js,Javascript,Arrays,Object,Map,Underscore.js,因此,下划线中的\uuu.map()函数不返回对象,而是接受它们。有什么方法可以让它返回它所获取的完全相同的对象吗 var _ = require("underscore"); var cars = { "mom": { "miles": "6", "gas": "4" }, "dad": { "miles": "6", "gas": "4" } } var regurgitate_cars =

因此,下划线中的
\uuu.map()
函数不返回对象,而是接受它们。有什么方法可以让它返回它所获取的完全相同的对象吗

var _ = require("underscore");

var cars = {
    "mom": {
        "miles": "6",
        "gas": "4"
    },
    "dad": {
        "miles": "6",
        "gas": "4"
    }
}

var regurgitate_cars = _.map(cars, function(value, key){
    return value;
});

/*
[ { miles: '6', gas: '4' }, { miles: '6', gas: '4' } ]
*/

var regurgitate_cars = _.map(cars, function(value, key){
    var transfer = {};
    transfer[key] = value;
    return transfer;
});

/*
[ { mom: { miles: '6', gas: '4' } },
  { dad: { miles: '6', gas: '4' } } ]
*/

map
返回一个
数组
,因此在不写出自己的数组的情况下,无法让它返回原始对象。见:

通过将列表中的每个值映射到 转换函数(迭代器)。如果本机映射方法存在, 它将被用来代替。如果列表是JavaScript对象,则迭代器的 参数将是(值、键、列表)

可以使用将其转换回对象

var regurgitate_cars = _.object(
    _.map(cars, function(value, key){
        return [key, value];
    })
);

至于直接使用
..map
执行此操作,您必须重写map才能执行此操作。

使用当前的map实现无法返回对象。库添加一个
.mapValues()
函数,该函数可以执行您想要的操作。以下是如何将其添加到代码中:

_.mixin({
    mapValues: function (input, mapper) {
        return _.reduce(input, function (obj, v, k) {
            obj[k] = mapper(v, k, input);
        }, {});
    }
});
现在可以使用mapValues返回新对象:

var regurgitate_cars = _.mapValues(cars, function(value, key){
    return value;
});
\uuz.map()
将始终返回一个数组,但您可以通过以下方式获得行为:

请注意,这将修改并返回原始对象,如果需要副本,可以提供一个空对象作为第三个参数,该参数将用作匿名函数第一次调用时的
memo
参数:

var regurgitateCars = _.reduce(cars, function(memo, value, key) {
    memo[key] = value;
    return memo;
}, {});

你想达到什么目标?浅/深复制对象?请参阅下划线的映射值。reduce()应该是可接受的答案您需要
返回[key,value]
才能工作…?@McGarnagle,很好的调用。你说得对,帖子已经更新了。而且它看起来更简洁。
var regurgitateCars = _.reduce(cars, function(memo, value, key) {
    memo[key] = value;
    return memo;
}, {});