代码之家  ›  专栏  ›  技术社区  ›  Rachel

如何按ID从JSON对象数组中删除数组元素

  •  0
  • Rachel  · 技术社区  · 4 年前

    这可能很容易,但给我带来了麻烦。鉴于这种JSON结构:

     "playlists" : [
          {
            "id" : "1",
            "owner_id" : "2",
            "song_ids" : [
              "8",
              "32"
            ]
          },
          {
            "id" : "2",
            "owner_id" : "3",
            "song_ids" : [
              "6",
              "8",
              "11"
            ]
          },
          {
            "id" : "3",
            "owner_id" : "7",
            "song_ids" : [
              "7",
              "12",
              "13",
              "16",
              "2"
            ]
          }
        ]
    

    如何按键/值从数组中删除对象?在这种情况下凭身份证?播放列表。拼接(1,1)?播放列表。删除(id)?不知道该如何优雅地做到这一点。假设我想删除ID=3的元素,如何得到这个结果:

     "playlists" : [
          {
            "id" : "1",
            "owner_id" : "2",
            "song_ids" : [
              "8",
              "32"
            ]
          },
          {
            "id" : "2",
            "owner_id" : "3",
            "song_ids" : [
              "6",
              "8",
              "11"
            ]
          }
    ]
    
    
    
    1 回复  |  直到 4 年前
        1
  •  0
  •   Alicia Sykes    4 年前

    使用 Array.filter ,可以筛选出与特定条件不匹配的元素。例如:

    const result = playlists.filter(playlist => playlist.id !== '2');
    

    下面是一个有效的演示:

    /* Example Data */
    const playlists = [
      {
        "id" : "1",
        "owner_id" : "2",
        "song_ids" : [ "8", "32"]
      },
      {
        "id" : "2",
        "owner_id" : "3",
        "song_ids" : ["6", "8","11" ]
      }
    ];
    
    /* Takes a list of playlists, and an ID to remove */
    const removePlaylistById = (plists, id) =>
      plists.filter(playlist => playlist.id !== id);
    
    /* Removes playlist ID 2 from list, prints result */
    const result = removePlaylistById(playlists, '2');
    console.log(result);

    另一个选择是使用 Array.findIndex 要获取具有给定ID的元素的索引,请使用 Array.splice 移除该元素。这将修改阵列,而无需复制。

    例如:

    const indexToRemove = playlists.findIndex((pl) => pl.id === '2');
    playlists.splice(indexToRemove, 1);
    
    推荐文章