首页 > 解决方案 > 有没有更好的方法用 map 或 reduce 重构这个 for 循环?

问题描述

我对javascript有点陌生,所以请善待。我有一个包含 for 循环的帖子。而且我想用 .map 重新编写循环,因为看起来我可以在这里这样做(有更好的方法吗?)我该怎么做?

这是我的代码..

app.post('/api/products', (req, res) => {
  let products = [];
  let id = null;
  let cart = JSON.parse(req.body.cart);
  if (!cart) return res.json(products);
  // TODO: replace for loop with .map
  for (var i = 0; i < data.products.length; i++) {
    id = data.products[i].id.toString();
    if (cart.hasOwnProperty(id)) {
      data.products[i].qty = cart[id];
      products.push(data.products[i]);
    }
  }
  return res.json(products);
});

标签: javascriptecmascript-6ecmascript-2016

解决方案


我不认为你可以重写它,map除非你想要你的数组中有空元素。可能应该使用reducehttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce):

let products = data.products.reduce((result, product) => {
  id = product.id.toString();
  if (cart.hasOwnProperty(id)) {
    product.qty = cart[id];
    result.push(product);
  }
  return result;
}, []);

我还没有测试过,但它应该可以工作。


推荐阅读