【问题标题】:How to remove properties from javascript object whose values are undefined using lodash filter? [closed]如何使用 lodash 过滤器从 javascript 对象中删除其值未定义的属性? [关闭]
【发布时间】:2018-02-15 08:59:13
【问题描述】:

我正在尝试将以下代码转换为使用 lodash _.filter 的代码

var substitutionValues = { one: "hi", two: undefined, three: 3};
var keys = _.keys(substitutionValues);

for (var i = 0; i < keys.length; i++) {
  if (substitutionValues[keys[i]] === undefined) {
    delete substitutionValues[keys[i]];
  }
}

// => { one: "hi", three: 3 }

请注意,我不想使用 lodash 的 _.reduce、_.pick 或 _.omit。

【问题讨论】:

  • 您可能想查看pickBy。您可以在迭代对象属性时指定条件,并使用它来过滤未定义的键。 lodash.com/docs/4.17.4#pickBy
  • 这将是一个糟糕的过滤器用例
  • 还可以查看这个相关的 stackoverflow 帖子:stackoverflow.com/questions/30726830/…
  • @MarcinMalinowski 我意识到这不是一个好的用例,但我还是想知道该怎么做。我已经知道 lodash 的 pickBy 和 omitBy 了。

标签: javascript filter lodash


【解决方案1】:

您可以使用_.pickBy() 作为对象的过滤器。由于_.pickBy() 的默认谓词是_.identity,它将过滤任何虚假值(第一个示例)。如果您想更具体,请相应地定义回调(第二个示例):

var substitutionValues = { one: "hi", two: undefined, three: 3, four: null };

/** 1st example **/
var widthoutAllFalsyValues = _.pickBy(substitutionValues);

console.log(widthoutAllFalsyValues);

/** 2nd example **/
var widthoutUndefined = _.pickBy(substitutionValues, _.negate(_.isUndefined));

console.log(widthoutUndefined);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"&gt;&lt;/script&gt;

要使用过滤器,您必须使用 _.entries() 之类的东西将对象转换为数组(以保留键),然后过滤条目,然后还原为对象:

var substitutionValues = { one: "hi", two: undefined, three: 3, four: null };

var result = _(substitutionValues)
  .entries()
  .filter(([k, v]) => !_.isUndefined(v))
  .reduce((o, [k, v]) => {
    o[k] = v;
    return o;
  }, {});
  
console.log(result);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2016-10-30
    相关资源
    最近更新 更多