Есть ли лучший способ реорганизовать это для цикла с картой или уменьшить? - PullRequest
0 голосов
/ 17 мая 2019

Я немного новичок в javascript, поэтому будьте добры.У меня есть сообщение, которое содержит цикл.И я хотел бы переписать цикл с помощью .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);
});

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Я не думаю, что вы можете переписать это с map, если вы не хотите нулевые элементы в вашем массиве.Вероятно, следует использовать reduce (https://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;
}, []);

Я не проверял его, но он должен работать.

0 голосов
/ 17 мая 2019

Довольно просто, карта работает как каждый, но позволяет вернуть преобразованный элемент. Но вам также нужна функция фильтра для удаления ненужных элементов.

Для каждого объекта преобразуйте его или нет (установите qty), затем верните его или значение null, затем добавьте функцию фильтра для удаления нулевых элементов:

return res.json(datas.products.map(function(e){

     if(cart[e.id.toString()])
     {
         e.qty = cart[e.id.toString()];
         return e;
     }
     else
     {
         return null;
     }

  }).filter(function(e){
     if(e)
       return true;
     else
       return false;
  });
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...