在另一个数组内循环数组

问题描述 投票:0回答:5

第一个数组:

var products_cart = [1, 2, 2]; (these are the products_id's)

第二个数组:

var cart_details =
    [{
        product_id: 1,
        product_name: 'product love',
        category_name: 'love'
    },
    {
        product_id: 2,
        product_name: 'product birthday love',
        category_name: 'birthday'
    }]

我想循环遍历数组 products_cart 的元素,并使用 products_cart 中的 Product_id 来渲染 cart_details 中的详细信息(我想循环遍历它们),这怎么可能?

编辑:

我想你们中的一些人误解了我的意思,我基本上希望它呈现这样的效果:

[{
    product_id: 1,
    product_name: 'product love',
    category_name: 'love'
},
{
    product_id: 2,
    product_name: 'product birthday love',
    category_name: 'birthday'
},
{
    product_id: 2,
    product_name: 'product birthday love',
    category_name: 'birthday'
}
]

我的错误,我不够清楚。

javascript arrays
5个回答
1
投票

假设 products_cart 的值为产品 id 值,那么您可以尝试以下操作:

var products_cart = [1, 2, 2];

var cart_details = [{
    product_id: 1,
    product_name: 'product love',
    category_name: 'love'
  },
  {
    product_id: 2,
    product_name: 'product birthday love',
    category_name: 'birthday'
  }
]

for (var i=0, max=products_cart.length; i < max; i++) {
  for (var j=0, maxi = cart_details.length; j < maxi; j++) {
  
  if ( products_cart[i] == cart_details[j].product_id) {
       console.log( "product id: " + cart_details[j].product_id);
       console.log("product name: " + cart_details[j].product_name); 
       console.log("category name: " + cart_details[j].category_name,"\n\n");
      }
    
    }
  }


1
投票

您可以在循环 ids 数组时使用 find()

let products = [];

products_cart.forEach(id => {
    let product = cart_details.find(detail => detail.product_id === id);

    if (product) {
       products.push(product);
    }
});

0
投票

var products_cart = [1, 2, 2];
var cart_details = [{
product_id: 1,
product_name: 'product love',
category_name: 'love'
},
{
product_id: 2,
product_name: 'product birthday love',
category_name: 'birthday'
}];

products_cart.forEach(function(id){
  cart_details.forEach(function(detail){
    if(detail.product_id === id){
      console.log(detail);
    }
  });
});


0
投票

我建议做的是用

products_cart
 循环遍历 
.forEach()
,然后用
cart_details
 检查 
Object.keys()
的键,并循环遍历它们。然后你可以简单地检查两者是否匹配。

然后,您就拥有了

product_id
中具有
products_cart
的所有对象的集合,并且可以随意处理它们。

以下示例只是将对象记录回给您:

var products_cart = [1, 2, 2];

var cart_details = [{
    product_id: 1,
    product_name: 'product love',
    category_name: 'love'
  },
  {
    product_id: 2,
    product_name: 'product birthday love',
    category_name: 'birthday'
  },
  {
    product_id: 3,
    product_name: 'NOT IN ARRAY products_cart',
    category_name: 'SHOULD NOT BE SHOWN'
  }
]


products_cart.forEach(function(product) {
  Object.keys(cart_details).forEach(function(key) {
    if (product === cart_details[key].product_id) {
      console.log(cart_details[key]);
    }
  });
});

我还添加了第三个产品,以证明只有

products_cart
中的产品才会在条件中显示。

希望这有帮助! :)


0
投票

需要清单吗?我认为使用 json 而不是列表。

var products_cart = [1, 2, 2];

var cart_details =[
{
    product_id: 1,
    product_name: 'product love',
    category_name: 'love'
},
{
    product_id: 2,
    product_name: 'product birthday love',
    category_name: 'birthday'
}];

var new_cart_details = {};

// changed list to josn
cart_details.map( item => {
    new_cart_details[item.product_id] = {
        product_name: item.product_name,
        category_name: item.category_name
    }
});

products_cart.map( item => {
    console.log(new_cart_details[item])
});
© www.soinside.com 2019 - 2024. All rights reserved.