繁体   English   中英

如果属性匹配,则返回数组中的对象

[英]Return Object in Array if Property Match

这是场景:

  • 有一个名为listOfSelectedProductIds的参数,其中包含所有选定的ID。

  • 还有一个名为listOfAllPossibleProducts列表,其中
    包含objects列表。 object包含一个ProductId
    ProductNameProductCode 看起来像这样:

在此处输入图片说明

手头的任务:

  • 我需要遍历listOfSelectedProductIds 如果ProductId一个相匹配ProductIdlistOfAllPossibleProducts ,然后我需要返回该对象。

这是我在做什么:

function SelectedProducts(listOfSelectedProductIds){
    for (var index = 0; index < listOfSelectedProductIds.length; index++) {
        var currentItem = listOfSelectedProductIds[index];

        var desiredProduct = _.contains(listOfAllPossibleProducts, currentItem);

        if (desiredProduct === true) {
            return listOfAllPossibleProducts[index];
        }
    }
}

目前正在发生什么:

  • 我的循环正在按预期方式获取选定的ID,即currentItem ,但_.contains(...)始终返回false。

题:

  • 什么是找到对象的最佳方式listOfAllPossibleProductsProductIds符合我的那ProductIdslistOfSelectedProductIds

如何使用_.filter

var result = _.filter(listOfAllPossibleProducts, function (el) {
  return _.contains(listOfSelectedProductIds, el.id);
});

或非下划线方法:

var result = listOfAllPossibleProducts.filter(function (el) {
  return listOfSelectedProductIds.indexOf(el.id) > -1;
});

演示

一次创建另一个结构productsByProductId

var productsByProductId = {};
listOfAllPossibleProducts.forEach(p => {
    productsByProductId[p.ProductId()] = p
});

也许还有一个辅助功能

function getProductById(id){
    return productsByProductId[id];
}

并使用它来将ID映射到节点

var selectedProducts = listOfSelectedProductIds.map(getProductById)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM