【问题标题】:Javascript filter and map where value for a key is trueJavascript过滤器和映射键的值为真
【发布时间】:2018-02-27 07:28:07
【问题描述】:

原来的代码是这样的......

selectedProducts = {
  10529814:false,
  10813521:true
};

this.selectedProducts.forEach((selected, value) => {
  if(selected) {
    this.discussionMessage.productIds.push(value);
  }
});

我想用过滤器/映射技术重写它,这就是我现在所拥有的。

this.discussionMessage.productIds = this.selectedProducts.filter((selected, value) => selected)
  .map((product) => product);

但无论我进行什么更改,我似乎都无法最终得到一个仅包含匹配值为 true 的产品 ID 的列表。

【问题讨论】:

  • 您需要过滤器和映射(如您在标题中所述)而不仅仅是过滤器
  • 您的数组无效。每个条目是对象还是字符串?
  • 您的 selectedProducts 数组不正确(除非它是 lamda 语法)。它需要是对象数组。类似[{10529814: false}, {10813521:true}]
  • this.selectedProducts.map((selected, value) => selected ? value : undefined).filter(value => value !== undefined);
  • …或者实际上你需要映射然后过滤。请注意,value 实际上是一个索引。

标签: javascript arrays lambda ecmascript-6


【解决方案1】:

您可以将array#filterObject.keys() 一起使用。遍历对象selectedProducts 的每个键并过滤那些为true 的值。

var selectedProducts = {10529814: false,10813521: true},
    result = Object.keys(selectedProducts).filter(k => selectedProducts[k]);
console.log(result);

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 2019-01-30
    • 2020-11-23
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2011-11-04
    • 2012-08-04
    相关资源
    最近更新 更多