【问题标题】:Javascript update array value if exists otherwise push new array to objectJavascript 如果存在则更新数组值,否则将新数组推送到对象
【发布时间】:2019-09-15 09:39:57
【问题描述】:

如果找到,我正在尝试更新数组中的值,如果没有,则添加一个新数组。

这是我一直在尝试的一些代码:

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);
}

【问题讨论】:

  • items[index].quantity = 2
  • 如果name 是唯一的,items 不应该是name 的对象吗?这将使这个问题消失。
  • @cgTag 解决了,谢谢!如果您能解释我是否也会遇到任何浏览器兼容性问题,可以接受作为答案。
  • 这里没有浏览器问题,这是一个语法错误,所以我宁愿不发布答案。

标签: javascript jquery multidimensional-array array-push


【解决方案1】:

因为index 存储了一个项目的索引,而x 是一个临时值,在该行之后不可用。请改用find,并确保您每次看到的都是同一个items

var item = cartItems.items.find(x => x.name == name);
if (item) {
  item.quantity = 2;
} else {
  cartItems.items.push(item);
}

【讨论】:

  • 谢谢,获取 cartItems.find 不是函数。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 2016-05-30
相关资源
最近更新 更多