Javascript 在节点JS中使用push或concat时,在数组中多次添加同一项

Javascript 在节点JS中使用push或concat时,在数组中多次添加同一项,javascript,node.js,Javascript,Node.js,我正在尝试使用for循环将项目推入数组,并希望使用填充的数组。“push”或“concat”成功执行。但问题是当有两个项循环时,第二次循环运行将第二次推到数组中两次,而不是与第一个循环项连接 var response_items = {}; var basketItems = []; for (var i = 0; i < basketRequest.items.length; i++) { basket_item_code = basketRequest.it

我正在尝试使用for循环将项目推入数组,并希望使用填充的数组。“push”或“concat”成功执行。但问题是当有两个项循环时,第二次循环运行将第二次推到数组中两次,而不是与第一个循环项连接

var response_items = {};
var basketItems = [];

for (var i = 0; i < basketRequest.items.length; i++) {

            basket_item_code = basketRequest.items[i].item_code;
            response_items.item_code = basket_item_code;
            basket_item_price = basketRequest.items[i].price;
            response_items.price = basket_item_price;
            basket_item_qty = basketRequest.items[i].qty;
            response_items.qty = basket_item_qty;
            item_sub_total = basket_item_price * basket_item_qty;
            sub_total = sub_total + item_sub_total;
            response_items.fee = '800';
            basketItems.push(response_items);
            //basketItems= basketItems.concat(response_items);
            console.log (i,'basketItems concatetw ...',  basketItems);
        }
当前O/p:

"items": [
        {
            "item_code": "787878777",
            "price": "1008",
            "qty": "5",
            "fee": "800"
        },
        {
            "item_code": "787878777",
            "price": "1008",
            "qty": "5",
            "fee": "800"
        }
    ]
所需O/p:

"items":[{
            "item_code": "234234",
            "price": "908",
            "qty": "5"
        },
        {
            "item_code": "787878777",
            "price": "1008",
            "qty": "5"
        }]

现在,您正在将相同的对象引用放入数组中,然后更改对象中的数据。因此,这两个地方都发生了变化。您需要将
response\u items
对象声明放入循环中,以便为每次迭代创建一个新对象并将其添加到数组中。

现在,您正在将相同的对象引用放入数组中,然后更改对象中的数据。因此,这两个地方都发生了变化。您需要将
响应\u项
对象声明放入循环中,以便为每次迭代创建一个新对象并将其添加到数组中。

您将多次将同一对象放入数组中。但是,您的代码不是真正可读的。我会这样做:

var basket_items = basketRequest.items.map(basket=>({
        item_code:basket.item_code,
        price:basket.price,
        qty:basket.qty,
        sub_total:(+basket.sub_total ||0) + basket.price * basket.qty,
        fee:'800'
}));
请注意,您需要将sub_total转换为数字(+),并且它不会出现在您的输入中


您多次将同一对象放入数组中。但是,您的代码不是真正可读的。我会这样做:

var basket_items = basketRequest.items.map(basket=>({
        item_code:basket.item_code,
        price:basket.price,
        qty:basket.qty,
        sub_total:(+basket.sub_total ||0) + basket.price * basket.qty,
        fee:'800'
}));
请注意,您需要将sub_total转换为数字(+),并且它不会出现在您的输入中


Put var response_items={};进入循环谢谢你乔纳斯W指出了这个错误!放置var响应_项={};在循环中解决了这个问题;进入循环谢谢你乔纳斯W指出了这个错误!放置var响应_项={};进入循环解决了这个问题。