簡體   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