【问题标题】:Underscore: remove all key/value pairs from an array of object下划线:从对象数组中删除所有键/值对
【发布时间】:2014-04-07 16:58:51
【问题描述】:

是否有“智能”下划线方法从对象数组中删除所有键/值对?

例如我有以下数组:

var arr = [
        { q: "Lorem ipsum dolor sit.", c: false },
        { q: "Provident perferendis veniam similique!", c: false },
        { q: "Assumenda, commodi blanditiis deserunt?", c: true },
        { q: "Iusto, dolores ea iste.", c: false },
    ];

我想得到以下信息:

var newArr = [
        { q: "Lorem ipsum dolor sit." },
        { q: "Provident perferendis veniam similique!" },
        { q: "Assumenda, commodi blanditiis deserunt?" },
        { q: "Iusto, dolores ea iste." },
    ];

我可以使用下面的 JS 来解决这个问题,但对我的解决方案并不满意:

for (var i = 0; i < arr.length; i++) {
    delete arr[i].c;
};

非常感谢任何建议。

【问题讨论】:

    标签: javascript arrays underscore.js


    【解决方案1】:

    您可以结合使用mapomit 来排除特定属性,如下所示:

    var newArr = _.map(arr, function(o) { return _.omit(o, 'c'); });
    

    mappick 仅包含特定属性,如下所示:

    var newArr = _.map(arr, function(o) { return _.pick(o, 'q'); });
    

    【讨论】:

    • 打败我! @User789 你也可以使用 _.pick 如果你想要相反的效果:var newArr = _.map(arr, function(o) { return _.pick(o, 'q'); });
    • @User789,另外,如果你只是想要一个数组,你也可以使用 pluck 方法:var newArr = _.pluck(arr, 'q');
    • @mister_rampage - 如果我知道pluck 中的所有键名将是完美的。
    • @User789 我不确定,但我猜pick 名义上会比omit 快。它还可能取决于您正在处理的数据类型。但是,如果速度是一个大问题,那么像您已经编写的那样简单的旧 JS 解决方案可能是要走的路。
    • @User789 您可能需要查看 Lo-Dash.js 或 Lazy.js 来比较性能。 Underscore 将使用移动设备上浏览器的原生地图功能。我认为 for 循环总是会表现得更好,但我不确定移动设备的表现。
    【解决方案2】:

    省略

    _.map(arr, _.partial(_.omit, _, 'c'));
    

    供选择

    _.map(arr, _.partial(_.pick, _, 'q'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2023-03-28
      • 2020-01-20
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多