Javascript 如果存在则更新数组值,否则将新数组推送到对象
Javascript update array value if exists otherwise push new array to object
我正在尝试更新数组中的值(如果找到),如果找不到,则向其添加一个新数组。
这是我一直在尝试的一些代码:
var cartItems = {};
var items = []
cartItems.items = items;
$('.proAdd').click(function(){
var name = $(this).attr("data-name");
var price = parseFloat($(this).attr("data-price"));
var quantity = parseInt($(this).attr("data-quantity"));
var item = {"name": name,"price": price,"quantity": quantity}
items.forEach(function(item) {
if (item.name === name) {
item.quantity = 2
return;
}else{
cartItems.items.push(item);
}
});
在此版本中,注释被推送。如果我取出 else 分支然后它会更新它但也会推送它。我创建了一个 fiddle for this.
也试过了,但它说 x.quantity 未定义:
var index = items.findIndex(x => x.name==name)
if (index != -1){
x.quantity = 2
}
else {
cartItems.items.push(item);
}
因为index
存储了一个项目的索引,而x
是一个临时值,在该行之后是不可用的。请改用 find
,并确保您每次都查看相同的 items
:
var item = cartItems.items.find(x => x.name == name);
if (item) {
item.quantity = 2;
} else {
cartItems.items.push(item);
}
我正在尝试更新数组中的值(如果找到),如果找不到,则向其添加一个新数组。
这是我一直在尝试的一些代码:
var cartItems = {};
var items = []
cartItems.items = items;
$('.proAdd').click(function(){
var name = $(this).attr("data-name");
var price = parseFloat($(this).attr("data-price"));
var quantity = parseInt($(this).attr("data-quantity"));
var item = {"name": name,"price": price,"quantity": quantity}
items.forEach(function(item) {
if (item.name === name) {
item.quantity = 2
return;
}else{
cartItems.items.push(item);
}
});
在此版本中,注释被推送。如果我取出 else 分支然后它会更新它但也会推送它。我创建了一个 fiddle for this.
也试过了,但它说 x.quantity 未定义:
var index = items.findIndex(x => x.name==name)
if (index != -1){
x.quantity = 2
}
else {
cartItems.items.push(item);
}
因为index
存储了一个项目的索引,而x
是一个临时值,在该行之后是不可用的。请改用 find
,并确保您每次都查看相同的 items
:
var item = cartItems.items.find(x => x.name == name);
if (item) {
item.quantity = 2;
} else {
cartItems.items.push(item);
}