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

Rac*_*hel 2 javascript json node.js ecmascript-6 reactjs

这可能很容易,但给我带来了麻烦。鉴于此 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"
        ]
      }
    ]
Run Code Online (Sandbox Code Playgroud)

如何通过键/值从数组中删除对象?在这种情况下通过 ID 吗?播放列表.splice(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"
        ]
      }
]


Run Code Online (Sandbox Code Playgroud)

Ali*_*cia 5

使用Array.filter,您可以过滤掉不符合特定条件的元素。例如:

const result = playlists.filter(playlist => playlist.id !== '2');
Run Code Online (Sandbox Code Playgroud)

这是一个工作演示:

/* 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);
Run Code Online (Sandbox Code Playgroud)


另一种选择是使用Array.findIndex给定 ID 获取元素的索引,然后使用Array.splice删除该元素。这将修改数组,而不需要副本。

例如:

const indexToRemove = playlists.findIndex((pl) => pl.id === '2');
playlists.splice(indexToRemove, 1);
Run Code Online (Sandbox Code Playgroud)