【问题标题】:How to extract a bunch of data from JSON matching an array of ids如何从与 id 数组匹配的 JSON 中提取一堆数据
【发布时间】:2017-06-11 22:08:30
【问题描述】:

在 Javascript 中,我有一个帖子数据集 (JSON)。每个帖子都有一个post_id。我有一个 post_ids 数组,我想用它来从主数据集中提取某些帖子。

const dataset = [
     {post_id: 1, title: 'First Post'},
     {post_id: 2, title: 'Second Post'},
     {post_id: 3, title: 'Third Post'},
];

然后我有一个数组,其中包含我想要获取的 哪些 个帖子:

const posts_to_get = [0,3];

如何解析数据集以提取id = 0id = 3 的位置?

我的数组可能包含许多 id,所以我猜我需要对其进行迭代。认为有一堆循环我可以做,但感觉不对。

注意:我目前正在为前端应用程序做一个“模拟后端”。从长远来看,我当然会更好/更有效地获取帖子。但目前我有这个 JSON 数据集可以使用。

谢谢!

【问题讨论】:

  • post_ids 是唯一的吗?
  • @AndyGaskell 是的!

标签: javascript json ecmascript-6


【解决方案1】:

这样的?

const dataset = [
     {post_id: 1, title: 'First Post'},
     {post_id: 2, title: 'Second Post'},
     {post_id: 3, title: 'Third Post'},
];
const posts_to_get = [1,3];
var result = dataset.filter(p=>posts_to_get.includes(p.post_id))
console.log(result)

【讨论】:

  • 谢谢米哈尔。我不认为这行得通吗?当我测试它时,它只返回最后一个帖子。我之前没听说过includes
  • 实际上确实有效!我有 0,3 作为 id,但 1,3 当然可以!
  • 这在 sn-p 中工作,将 posts_to_get 更改为打印 3 个帖子中的 2 个。 includes 有点新,看这里:moz docs。如果您的目标是较旧的浏览器,您可以使用例如 .indexOf(p.post_id) >= 0
【解决方案2】:

如果您有一个大型数据集,那么在尝试读取之前将数组转换为对象可能是值得的。

const m = dataset.reduce((obj, cur) => {
    obj[cur.post_id] = cur;
    return obj;
}, {});

查找将是恒定的时间(尽管您必须将要查找的 post_id 转换为字符串:

const ids_to_find = [1, 3];
console.log(ids_to_find.map(i => m[i.toString()]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多