【问题标题】:Return object from _.map()从 _.map() 返回对象
【发布时间】:2013-11-28 05:00:10
【问题描述】:

所以下划线中的_.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' } } ]
*/

【问题讨论】:

标签: javascript arrays object map underscore.js


【解决方案1】:

您可以使用_.object() 将其转回对象。

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

至于直接使用_.map,你必须重写地图才能做到这一点。

【讨论】:

  • 您需要return [key, value] 才能使其工作...?
  • @McGarnagle,好电话。你是对的,帖子已经更新了。而且看起来更简洁。
【解决方案2】:

_.map() 将始终返回一个数组,但您可以使用 _.reduce() 获得该行为:

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

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

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

【讨论】:

    【解决方案3】:

    没有办法用当前的 map 实现返回一个对象。 It's been suggested 库添加了一个 .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;
    });
    

    【讨论】:

      【解决方案4】:

      map 返回一个array,因此如果不编写自己的对象,就无法让它返回原始对象。见documentation

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多