【问题标题】:Using JavaScript es6 Array.find() with an array of ID's使用带有 ID 数组的 JavaScript es6 Array.find()
【发布时间】:2017-01-17 14:04:14
【问题描述】:

考虑以下代码:

const promotions = [{ Id: 14 }, { Id: 255 }, { Id: 23 }, { Id: 56 }]; 
const timePromotionIds = [255,56];

const promos = promotions.find(promotion => {
      return promotion.Id === timePromotionIds.map(timePromotionId => {
        return timePromotionId;
      });
    });

我想返回与 timePromotionIds 数组中的 ID 匹配的促销对象。

我也试过了:

const promos = promotions.find(promotion => {
      return timePromotionIds.map(timePromotionId => {
        return promotion.Id === timePromotionId;
      });
    });

这让我获得了第一个对象,但没有其他任何对象。稍微好一点,但还不够。

这可能吗?我显然做错了什么!

谢谢 迈克尔

【问题讨论】:

  • 使用过滤器。 const promos = promotions.filter(o => timePromotionIds.includes(o.Id)); 如果不支持includes,请使用indexOf
  • Array#map 返回另一个数组.. 不是元素...
  • @Tushar,这应该是答案:)
  • 感谢@Tushar,但现在它返回一个空数组。有任何想法吗?我需要返回匹配的这些对象的数组。
  • @Tushar - 你是完全正确的。这行得通。让我失望的是因为我得到了一个字符串数组而不是数字。即 ["255","56"]。在这个数组上使用 map 并解析为数字现在适用于您的方法。请在下面提交答案,我会将您标记为正确。谢谢!

标签: javascript arrays ecmascript-6


【解决方案1】:

您可以使用filter方法从timePromotionIds数组中过滤出id为contains的对象。

const promotions = [{ Id: 14 }, { Id: 255 }, { Id: 23 }, { Id: 56 }]; 
const timePromotionIds = [255,56];

const promos = promotions.filter((promo) => {  
  return timePromotionIds.includes(promo.Id); 
});

console.log(promos);

结果:

[Object { Id=255}, Object { Id=56}]

请注意,因为filter 返回过滤后的元素,所以您必须在调用contains 方法后返回这些元素。

【讨论】:

  • 你最后一段是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2015-11-26
  • 2017-07-07
  • 2017-12-29
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多