ホーム>source

以下に示すような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)
});

あなたの答え
  • 解決した方法 # 1

    あなたの状態は間違っています。 jQuery.inArray(newid, idsarray) === -1 である必要があります  操作 jQuery.inArray(newid, idsarray)   -1 を返します   newid の場合   idsarray には存在しません 。だから、それはあなたが必要とするもので、 idsarray のユニークな出現をチェックする 。

    indexOf() を使用することもできます  同じための操作。 idsarray.indexOf(newid) === -1

    OPのコード

    $(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)
    });
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    

    indexOf() の使用

    $(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 (idsarray.indexOf(newobj) === -1) {
        test.push(newobj)
      }
      alert(test.length)
    });
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    

  • 解決した方法 # 2

    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 を使用することもできます  (または単純な古いオブジェクト)を使用して、2つを結合します。

    let test = new Map();
    ...
    if (!test.has(newid)) {
        test.set(newobj);
    }
    
    

    Map から配列を取得できます   test.values() を使用する 。

  • 解決した方法 # 3

    別の array の使用を避けることができます   id を含む  オブジェクトの。ネイティブ関数Array.someを使用して存在を確認し、それに応じてプッシュできます。

    var test = [{"name":"Mike","incentives":"23.45","id":"1"},{"name":"Larsen","incentives":"34.78","id":"2"},{"name":"Steve","incentives":"26.78","id":"3"}];
    var newobj = {"name":"RAM","incentives":"56.78","id":"4"};
    if(!test.some(({id}) => id == newobj.id)) test.push(newobj);
    console.log(test);
    
    

    また、プッシュ操作が非常に頻繁に行われる場合、毎回ループすることはパフォーマンスに影響します。 ids の配列の代わりに 、 map を維持できます  または set  検索の複雑さがO(1)であるため、IDの数。

    var test = [{"name":"Mike","incentives":"23.45","id":"1"},{"name":"Larsen","incentives":"34.78","id":"2"},{"name":"Steve","incentives":"26.78","id":"3"}];
    var newobj = {"name":"RAM","incentives":"56.78","id":"4"};
    var ids = test.reduce((a, {id}) => Object.assign(a, {[id]:id}), {});
    if(!ids[newobj.id]) {
       test.push(newobj);
       ids[newobj.id] = newobj.id;
    }
    console.log(test);
    
    

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Zapier - ザピア:無効なAPI応答