【问题标题】:reset array of objects with lodash用 lodash 重置对象数组
【发布时间】:2016-04-27 20:37:13
【问题描述】:

如何重置数组中与“db”不同的对象的属性? 我需要将 'db' 以外的其他设置为空字符串。

var arr =   [
  {
    "db": "RHID",
    "prv_value": "1",
    "nxt_value": "1",
    "diagnostic": "1"
  },
  {
    "db": "CD_DOC_ID",
    "prv_value": "2",
    "nxt_value": "2",
    "diagnostic": "2"
  },
  ...
]

【问题讨论】:

    标签: javascript arrays object lodash


    【解决方案1】:

    我会这样做:

    _.map(arr, function(i) {
      return _.assign(
        _(i).omit('db').mapValues(_.constant('')).value(),
        _.pick(i, 'db')
      );
    });
    

    本质上,这使用map() 创建一个新对象数组。它使用assign() 来构建映射对象(它基本上是连接两个对象)。传递给assign() 的第一个参数是删除了db 属性的对象。这是使用omit() 完成的。删除此属性后,我们可以使用 mapValues() 将所有内容设置回空字符串。

    现在我们要做的就是添加db 属性,这就是我们使用assign() 的原因。 pick() 函数用于获取db 的值。

    【讨论】:

    • 谢谢。因为我是一个新手,所以我使用 Michael L. 因为不习惯函数式编程。祝贺您的电子书和您的工作。
    • 我认为你不需要omit() 方法,你可以通过assign() 一直链接它来简化它。 See this
    【解决方案2】:

    使用map 函数,它接受一个数组和一个转换函数。它将每个元素传递给函数进行修改。

    _.map(arr, function(curr) {
        for (var prop in curr) {
            // Please read http://phrogz.net/death-to-hasownproperty
            if (curr.hasOwnProperty(prop) && prop != 'db') {
                curr[prop] = '';
            }
        } 
    
        return curr;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 2016-08-06
      相关资源
      最近更新 更多