我对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);
});
答案 0 :(得分:1)
除非您要在数组中使用null元素,否则我不认为可以用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;
}, []);
我还没有测试过,但是应该可以。
答案 1 :(得分:-3)
非常简单,地图就像每个地图一样工作,但是允许返回转换后的元素。但是您还需要过滤器功能来删除不需要的元素。
对于每个对象,对其进行转换或不转换(设置数量),然后将其返回或为null,然后添加一个过滤器函数以删除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;
});
);