jquery - 如果 Object 不存在,则推送到 JSON 数组
问题描述
我有一个如下所示的 JSON
[
{
"name": "Mike",
"incentives": "23.45",
"id": "1"
},
{
"name": "Larsen",
"incentives": "34.78",
"id": "2"
},
{
"name": "Steve",
"incentives": "26.78",
"id": "3"
}
]
如果 JSON 对象中不存在 id,我需要将新的 JSON 对象推送到 JSON 数组中
尝试以这种方式工作,任何更好的方法
$(document).ready(function() {
var idsarray = [];
var test = [
{
"name": "Mike",
"incentives": "23.45",
"id": "1"
},
{
"name": "Larsen",
"incentives": "34.78",
"id": "2"
},
{
"name": "Steve",
"incentives": "26.78",
"id": "3"
}
];
for(var i=0;i<test.length;i++)
{
idsarray.push(test[i].id)
}
var newobj = {
"name": "RAM",
"incentives": "56.78",
"id": "4"
}
var newid = newobj.id;
if(jQuery.inArray(newid, idsarray) !== -1)
{
test.push(newobj)
}
alert(test.length)
});
解决方案
inArray
是缓慢的。如果你这样做一次,这不是最糟糕的事情,但find
或者some
在原始数组上会更好:
if (!test.some(o => o.id == newid)) {
test.push(newobj)
}
但是,如果您经常这样做,一个更好的主意是创建一个集合,因为检查集合中的成员非常非常快:
let idset = new Set();
...
if (!idset.has(newid)) {
test.push(newobj);
idset.add(newid);
}
您还可以使用Map
(甚至是普通的旧对象)将两者结合起来:
let test = new Map();
...
if (!test.has(newid)) {
test.set(newobj);
}
您可以从Map
using获取数组test.values()
。
推荐阅读
- javascript - D3 选择总是返回 enter() 之后的所有项目,无论它们是否是新的
- go - 按 Apache Beam 管道中的键集合类型分组
- python - Python DataFrame.to_csv 导致带有重音符号的字符在 excel 中加载不正确
- mongodb - 在 MongoDB 的数组中添加数字
- python - 如何仅绘制熊猫 datetime64[ns] 属性的时间
- reactjs - React 中的 useEffect Hook 导致无限循环
- extjs - 超过一定宽度时条形图标签丢失(自 ExtJs 7.2 起)
- php - CKeditor 4 - 内容的 Jquery 只带回 PHP 变量
- kubernetes - 使用 kubernetes 水平 pod 缩放来缩放 Kafka 流应用程序
- python - 绘制模型模拟的后验绝对误差分布