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

Javascript 如果属性匹配,则返回数组中的对象,javascript,knockout.js,underscore.js,Javascript,Knockout.js,Underscore.js,以下是场景: function SelectedProducts(listOfSelectedProductIds){ for (var index = 0; index < listOfSelectedProductIds.length; index++) { var currentItem = listOfSelectedProductIds[index]; var desiredProduct = _.contains(listOfAllPo

以下是场景:

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];
        }
    }
}
  • 有一个名为
    ListofSelectedProductId
    的参数包含 所有选定的ID

  • 还有另一个名为“所有可能的产品列表”的列表,它是
    包含
    对象的列表
    。该
    对象
    包含一个
    ProductId

    ProductName
    ProductCode
    。它看起来像这样:

手头的任务:

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的
    列表。如果
    ProductId
    所有可能产品列表中的
    ProductId
    匹配,则我需要返回该对象
以下是我正在做的:

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列表){
对于(var index=0;index
当前发生的事情:

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
    ,但
    包含(…)
    总是返回false
问题:

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];
        }
    }
}
  • 在中查找对象的最佳方法是什么
    所有可能的产品的列表
    ,这些产品具有与我的
    ProductIds
    列表中的
    ProductIds

使用
过滤器如何

var result = _.filter(listOfAllPossibleProducts, function (el) {
  return _.contains(listOfSelectedProductIds, el.id);
});
或非下划线方法:

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

使用
过滤器如何

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)

创建另一个结构
productsByProductId
一次

var productsByProductId = {};
listOfAllPossibleProducts.forEach(p => {
    productsByProductId[p.ProductId()] = p
});
也许还有一个辅助函数

function getProductById(id){
    return productsByProductId[id];
}
并使用它将ID映射到节点

var selectedProducts = listOfSelectedProductIds.map(getProductById)

哇,这是一个圆滑的回答。。。谢谢你的帮助!!哇,这是一个圆滑的回答。。。谢谢你的帮助!!