在另一个数组中循环遍历数组

3

第一个数组:

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

抱歉,我的表述不够清晰。


1
结果应该是什么样子? - user3589620
应该有3个结果使用购物车细节中的详细信息。 - Cedric Hadjian
product_cart 中不应该有重复的内容!? - user3589620
是的,应该这样做!我想要2显示两次,而不是一次。 - Cedric Hadjian
5个回答

1
您可以在循环遍历 ids 数组时使用 find()
let products = [];

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

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

@CedricHadjian,肯定有影响。但我使用了ES6功能,这可能是你遇到问题的原因吗?你在哪里运行代码? - malifa
EJS(express.js 应用程序) - Cedric Hadjian
当我记录产品时,它返回了一个空数组。 - Cedric Hadjian
@CedricHadjian 请看一下,我使用了您上面的示例数组,输出结果与您期望的一致:https://jsfiddle.net/h1qtfjbp/2/。也许您的实现中有一些错误。 - malifa
slevy1的回答有效,看一下。我想要类似的东西。 - Cedric Hadjian

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");
      }
    
    }
  }


我希望它返回3个结果,请再次阅读问题,我也进行了编辑。 - Cedric Hadjian
@Cedric 好的,我修复了 -- 希望这对你有用。这是一个纯JavaScript解决方案。 - slevy1
1
@Cedric 不用谢,很高兴你喜欢我的回答。 - slevy1

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

是的,我确实需要一个列表,我需要循环遍历结果以在视图中显示它。这返回了3个单独的对象,这正是我要找的,但我需要它们在一个数组中。 - Cedric Hadjian
嗯,那么你的问题还没有解决。我建议的方法也不会出现将循环反转的问题。 - 멍개-mung
这个方法对我有用,但是它更长,@slevy1的解决方案简单明了。感谢您的时间! - Cedric Hadjian

0
我建议的做法是使用.forEach()循环遍历products_cart,然后使用Object.keys()检查cart_details的键,并对它们进行循环遍历。然后你可以简单地检查两者是否匹配。
然后,你就有了一个包含所有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中的产品才会显示在条件语句中。

希望这可以帮到你!:)


我觉得你误解了我的意思,我已经编辑了帖子,请查看一下。 - Cedric Hadjian
product_id 未定义 :( - Cedric Hadjian
问题是我正在使用express.js,因此我需要删除Object.keys(),如果我不删除它则不会返回任何内容,如果我删除它则会返回错误(product_id未定义)。我认为可以通过简单的for循环解决,并且不需要注意它是一个express.js应用程序。 :/ - Cedric Hadjian
我不确定为什么你需要删除JavaScript框架中的Object.keys()...但是你可以尝试这个 - https://www.npmjs.com/package/object-keys - Obsidian Age
这个可能对我有用,但是请看slevy1的答案。那才是我要找的,不过还是非常感谢你的时间。 - Cedric Hadjian
显示剩余2条评论

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


我觉得你误会了,我已经编辑了帖子,看看吧。 - Cedric Hadjian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接