gpt4 book ai didi

javascript - 在Javascript中分配对象内部的数组

转载 作者:行者123 更新时间:2023-11-30 20:25:49 25 4
gpt4 key购买 nike

我有 cartproducts 全局变量。

产品可以有多个属性。

代码如下

var products = [
{
name: 'Table',
price: 200,
attributes: [
{
name: 'Height',
type: 'text',
default_value: '',
},
{
name: 'Width',
type: 'text',
default_value: '',
}
],
},
{
name: 'Chair',
price: 150,
attributes: [
{
name: 'Height',
type: 'text',
default_value: '',
},
{
name: 'Width',
type: 'text',
default_value: '',
},
{
name: 'Company',
type: 'text',
default_value: ''
}
],
}
];

var cart = {
products: [],
};

//console.log('Initial cart',cart);

//add product to cart
let p = Object.assign({},products[0]);
cart.products.push(p);

//console.log('First cart', cart);
//change price
cart.products[0].price = 20;
//console.log('products',products);
//console.log('second cart',cart);

//change attribute of product
cart.products[0].attributes[0].value = 5;

此代码更改全局 products value 属性而不是 cart 属性。

请帮我解决这个问题。

最佳答案

来自 MDN

Object.assign() copies property values. If the source value is a reference to an object, it only copies that reference value.

由于 products[0] 是您数据中的一个对象,这就是您面临浅拷贝问题的原因

相反你可以使用

let p = JSON.parse(JSON.stringify(products[0]));

var products = [{
name: 'Table',
price: 200,
attributes: [{
name: 'Height',
type: 'text',
default_value: '',
},
{
name: 'Width',
type: 'text',
default_value: '',
}
],
},
{
name: 'Chair',
price: 150,
attributes: [{
name: 'Height',
type: 'text',
default_value: '',
},
{
name: 'Width',
type: 'text',
default_value: '',
},
{
name: 'Company',
type: 'text',
default_value: ''
}
],
}
];

var cart = {
products: [],
};

//console.log('Initial cart',cart);

//add product to cart
let p = JSON.parse(JSON.stringify(products[0]));

cart.products.push(p);

//console.log('First cart', cart);
//change price
cart.products[0].price = 20;
console.log('products',products);
console.log('second cart',cart);

关于javascript - 在Javascript中分配对象内部的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50947985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com