【问题标题】:Underscore equivalent of _.pick for arrays下划线等价于数组的 _.pick
【发布时间】:2014-03-09 09:53:18
【问题描述】:

我了解 pick 用于取回仅具有指定属性的对象:

_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age');
=> {name: 'moe', age: 50}

我将如何对数组执行相同的操作,比如我有一个数组,例如:

[{name: 'moe1', age: 50, userid: 'moe1'},
{name: 'moe2', age: 50, userid: 'moe1'},
{name: 'moe3', age: 50, userid: 'moe1'}]

我想将它映射到一个数组,以便只包含 nameage 属性,例如:

[{name: 'moe1', age: 50},
{name: 'moe2', age: 50},
{name: 'moe3', age: 50}]

我必须对数组执行each(),然后对每个对象执行pick(),还是有更简洁的方法?

编辑

抱歉,这只是另一个小要求,我将如何执行 where(即获取所有年龄大于 50 岁的人)然后执行pick编辑 像这样完成的,不知道下划线中的链接是如何工作的。

_(data).reject(function (r) { return d.age<51; }).map(function (o) {
            return _.pick(o, "age", "name");
});

【问题讨论】:

    标签: javascript arrays underscore.js


    【解决方案1】:

    您必须使用_.map 并在所有对象上应用相同的_.pick

    var data = [{name: 'moe1', age: 30, userid: 'moe1'},
                {name: 'moe2', age: 50, userid: 'moe1'},
                {name: 'moe3', age: 60, userid: 'moe1'}];
    
    var result = _.map(data, function(currentObject) {
        return _.pick(currentObject, "name", "age");
    });
    
    console.log(result);
    

    输出

    [ { name: 'moe1', age: 50 },
      { name: 'moe2', age: 50 },
      { name: 'moe3', age: 50 } ]
    

    如果你想获取年龄大于 50 的对象,你可能想要这样做,像这样

    var data = [{name: 'moe1', age: 30, userid: 'moe1'},
                {name: 'moe2', age: 50, userid: 'moe1'},
                {name: 'moe3', age: 60, userid: 'moe1'}];
    
    function filterByAge(currentObject) {
        return currentObject.age && currentObject.age > 50;
    }
    
    function omitUserId(currentObject) {
        return _.omit(currentObject, "userid");
    }
    
    var result = _.map(_.filter(data, filterByAge), omitUserId);    
    console.log(result);
    

    输出

    [ { name: 'moe3', age: 60 } ]
    

    您也可以像这样使用链接 as suggested by rightfold 来做同样的事情

    var result = _.chain(data).filter(filterByAge).map(omitUserId).value();
    

    【讨论】:

    • 你必须先做一个map 似乎很奇怪。似乎下划线将具有功能。考虑到 pluck 除了在单个字段上之外,它确实做到了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2018-07-10
    • 2011-11-01
    相关资源
    最近更新 更多