【发布时间】:2018-11-29 13:45:31
【问题描述】:
我有cart 和products 全局变量。
产品可以有多个属性。
这是一个代码
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 属性而不是购物车属性。
请帮我解决这个问题。
【问题讨论】:
-
如果你可以使用 lodash,试试
lodash.cloneDeep。您仅复制键,并且每个非原始值(例如对象)都通过指针传递(而不是克隆)。深克隆是一种选择,另一种选择,它也可以完成这项工作p = JSON.parse(JSON.stringify(products[0]))
标签: javascript arrays object pass-by-reference pass-by-value