javascript - 如何通过对象键推送和替换数组中的值
问题描述
我想知道是否可以将对象推送到数组,如果 iddata-seats
已经存在,则在下次单击时替换/覆盖该值。
代码:
var active_filters = [];
$("a").on('click', function() {
active_filters.push({id: "data-seats", value: increment_value });
});
解决方案
我想知道是否可以将对象推送到数组,如果 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);
这些工作是因为 ifdata-seats
不在active_filters
对象/地图上,active_filters["data-seats"]
/ active_filters.get("data-seats")
isundefined
和undefined || 0
is 0
。(然后我们将其加 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});
}
推荐阅读
- kubernetes - Helm 将额外的元素传递给数组
- windows - 在 Win32 API 中限制文本框键盘输入
- python - 在不和谐机器人中实现图像搜索
- telegram - Telegram 用户的聊天 ID 可以更改吗?
- javascript - JavaScript - Array.from(set) 与 Array.from(set.values()) 的任何细微差别
- c - STM32F429-DISC1 LCD打印双像素
- haskell - 如何编写普遍量化函数的存在版本?
- java - 在单独的线程上重试
- php - PHP 在 HTML 输入中截断变量
- javascript - 如何从