javascript - 如何访问存储在由一个字段链接的数组对象中的两个数据?

标签 javascript arrays json

我有一个 REST API,我从中获取 json 数据并将它们存储在数组中。 API 如下所示:

[


    {
        "id": "100",
        "name": "Person1",
        "number": "+91-8980439023"
      },
      {
        "id": "102",
        "name": "Person2",
        "number": "+91-5980339023"
      },
      {
        "id": "105",
        "name": "Person3",
        "number": "+91-8980439023"
      },
      {
        "id": "101",
        "name": "Person4",
        "number": "+91-8980439023",
        "parent": "105"
      },
      {
        "id": "110",
        "name": "Person5",
        "number": "+91-8980439023"
      },
      {
        "id": "115",
        "name": "Person6",
        "number": "+91-9834295899",
        "parent": "100"
      }
    ]

一些数据有“parent”字段。“parent”字段中的值是其他数据的“id”。现在我想将这些在其他数据的“父”字段中有引用的数据存储在一个单独的数组中。例如: id=101 的数据具有值为 105 的“父”键,这又是第三个数据的 id。因此 id=105 的数据应存储在单独的数组中。

我怎样才能以简单且可扩展的方式进行操作?

最佳答案

尝试

let parents = data.filter(d=> data.some(c=> c.parent==d.id));

let data = [
    {
        "id": "100",
        "name": "Person1",
        "number": "+91-8980439023"
      },
      {
        "id": "102",
        "name": "Person2",
        "number": "+91-5980339023"
      },
      {
        "id": "105",
        "name": "Person3",
        "number": "+91-8980439023"
      },
      {
        "id": "101",
        "name": "Person4",
        "number": "+91-8980439023",
        "parent": "105"
      },
      {
        "id": "110",
        "name": "Person5",
        "number": "+91-8980439023"
      },
      {
        "id": "115",
        "name": "Person6",
        "number": "+91-9834295899",
        "parent": "100"
      }
    ];
    
let parents = data.filter(d=> data.some(c=> c.parent==d.id));

console.log(parents);

要有 O(2n) 的复杂度,首先将父 id 放入某个哈希表,然后进行过滤

let data = [
    {
        "id": "100",
        "name": "Person1",
        "number": "+91-8980439023"
      },
      {
        "id": "102",
        "name": "Person2",
        "number": "+91-5980339023"
      },
      {
        "id": "105",
        "name": "Person3",
        "number": "+91-8980439023"
      },
      {
        "id": "101",
        "name": "Person4",
        "number": "+91-8980439023",
        "parent": "105"
      },
      {
        "id": "110",
        "name": "Person5",
        "number": "+91-8980439023"
      },
      {
        "id": "115",
        "name": "Person6",
        "number": "+91-9834295899",
        "parent": "100"
      }
    ];
    
let hash = {};
data.forEach(d=> hash[d.parent]=d);
let parents = data.filter(d=> d.id in hash);

console.log(parents);

关于javascript - 如何访问存储在由一个字段链接的数组对象中的两个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59087961/

相关文章:

javascript - 从代码行中删除 href

javascript - Ionic2 禁用标签元素上的 300 毫秒延迟

c - fread 后的字符数组长度小于预期

javascript - 搜索 javascript 对象或对象数组最有效

javascript - 使用 angularjs 将一个数组数据添加到另一个数组中

jquery - JSONP 请求错误处理

javascript - 使用 Phaser 制作迷宫的平铺 map 编辑器

javascript - Gruntfile 中止文件

javascript - 如何在此处为日期添加一个月?

javascript - 如何从 JavaScript 对象数组中打印出元素