2016-02-25 35 views
0

下面是這種情況:返回對象在數組,如果房產匹配

  • 有包含 所有選定的id名爲listOfSelectedProductIds的參數。

  • 有一個標題爲listOfAllPossibleProducts另一份名單,其中
    包含objects列表。那object包含ProductId,
    ProductNameProductCode。它看起來是這樣的:

enter image description here

手頭的任務:

  • 我需要遍歷我listOfSelectedProductIds。如果ProductId匹配從listOfAllPossibleProductsProductId,那麼我需要返回該對象。

下面是我在做什麼:

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]; 
     } 
    } 
} 

什麼是目前發生的事情:

  • 我環路越來越爲即currentItem預期選擇的ID,但_.contains(...) 始終返回false。

問:

  • 什麼是找到 listOfAllPossibleProductsProductIds匹配的對象最好的辦法我 在listOfSelectedProductIds

回答

3

ProductIds如何使用_.filter

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

或非下劃線方法:

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

DEMO

+1

哇,這是一個漂亮的答案...謝謝大家了幫幫我!! – ChaseHardin

1

創建另一個結構productsByProductId一次!

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

,也許一個輔助功能

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

,並用此來的ID映射到節點

var selectedProducts = listOfSelectedProductIds.map(getProductById)