首页 > 解决方案 > 如果 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)

});

标签: jquery

解决方案


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

您可以从Mapusing获取数组test.values()


推荐阅读