【问题标题】:How to Push and Replace Value in Array by Object Key如何通过对象键推送和替换数组中的值
【发布时间】:2018-05-04 14:47:17
【问题描述】:

我想知道是否可以将对象推送到数组中,如果 id data-seats 已经存在,请在下次单击时替换/覆盖该值。

代码:

var active_filters = [];
$("a").on('click', function() {
    active_filters.push({id: "data-seats", value: increment_value });
});

【问题讨论】:

标签: javascript jquery arrays


【解决方案1】:

我想知道是否可以将对象推送到数组,如果 id data-seats 已经存在,则在下次单击时替换/覆盖该值。

是的(见下文),但如果您正在寻找一种通过唯一键存储事物的结构,那么数组并不是您的最佳选择。对象(使用Object.create(null) 创建,因此它不继承任何属性)或Map 将是更好的选择。那你就做

// With an object
active_filters["data-seats"] = (active_filters["data-seats"] || 0) + 1;

// With a Map
active_filters.set("data-seats", (active_filters.get("data-seats") || 0) + 1);

因为如果data-seats 不在active_filters 对象/地图上,则active_filters["data-seats"]/active_filters.get("data-seats")undefined,而undefined || 00。 (然后我们将其加 1,并设置新值。)

但是你可以用数组来做:使用find查看对象是否已经存在,如果存在则更新它,如果不存在则添加它:

var obj = active_filters.find(function(entry) { return entry.id === "data-seats"; });
if (obj) {
    ++obj.value;
} else {
   active_filters.push({id: "data-seats", value: 1});
}

【讨论】:

  • 非常感谢 TJ,这太完美了!快速提问...如果使用我首先使用 find 检查对象是否存在的方法...如果值曾经 == 0,那么我该如何从数组中删除此对象数据席位?
  • @Michael:为此,您不会使用find,而是使用findIndex,然后使用splice 和结果索引。
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 2020-05-23
  • 2020-01-09
  • 1970-01-01
  • 2014-08-08
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多