Return Object in Array if 属性 匹配
Return Object in Array if Property Match
场景如下:
有一个标题为listOfSelectedProductIds
的参数包含
所有选定的 ID。
还有一个名为 listOfAllPossibleProducts
的列表,
包含 objects
的列表。 object
包含一个 ProductId
,
ProductName
,以及 ProductCode
。它看起来像这样:
手头的任务:
- 我需要遍历
listOfSelectedProductIds
。如果 ProductId
匹配来自 listOfAllPossibleProducts
的 ProductId
,那么我需要 return 那 object.
这是我正在做的事情:
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(...)
总是 return 是错误的。
问题:
- 找到 object 的最佳方法是什么
listOfAllPossibleProducts
有 ProductIds
符合我的
ProductIds
在 listOfSelectedProductIds
如何使用_.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)
场景如下:
有一个标题为
listOfSelectedProductIds
的参数包含 所有选定的 ID。还有一个名为
listOfAllPossibleProducts
的列表,
包含objects
的列表。object
包含一个ProductId
,
ProductName
,以及ProductCode
。它看起来像这样:
手头的任务:
- 我需要遍历
listOfSelectedProductIds
。如果ProductId
匹配来自listOfAllPossibleProducts
的ProductId
,那么我需要 return 那 object.
这是我正在做的事情:
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(...)
总是 return 是错误的。
问题:
- 找到 object 的最佳方法是什么
listOfAllPossibleProducts
有ProductIds
符合我的ProductIds
在listOfSelectedProductIds
如何使用_.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)