【问题标题】:How to fetch specific object from json containing arrays of objects如何从包含对象数组的json中获取特定对象
【发布时间】:2019-12-06 07:09:01
【问题描述】:

我正在尝试从以下 json 对象中过滤 id = 963。但是得到空数组作为输出。代码如下:

 var json ={"prizes"[
{"year":"2018",
 "category":"physics",
 "overallMotivation":"\u201cfor groundbreaking inventions in the field of laser physics\u201d",
 "laureates"[
 {"id":"960",
  "firstname":"Arthur",
  "surname":"Ashkin",
  "motivation":"\"for the optical tweezers and their application to biological systems\"","share":"2"},
{"id":"961",
 "firstname":"G\u00e9rard",
 "surname":"Mourou",
 "motivation":"\"for their method of generating high-intensity, ultra-short optical pulses\"",
 "share":"4"},
 {"id":"962",
  "firstname":"Donna",
  "surname":"Strickland",
  "motivation":"\"for their method of generating high-intensity, ultra-short optical pulses\"",
  "share":"4"}]},
  {"year":"2018",
   "category":"chemistry",
  "laureates":[
  {"id":"963",
   "firstname":"Frances H.",
   "surname":"Arnold",
   "motivation":"\"for the directed evolution of enzymes\"",
   "share":"2"},
  {"id":"964",
   "firstname":"George P.",
   "surname":"Smith",
   "motivation":"\"for the phage display of peptides and antibodies\"",
   "share":"4"},
  {"id":"965",
   "firstname":"Sir Gregory P.","surname":"Winter",
   "motivation":"\"for the phage display of peptides and antibodies\"",
   "share":"4"}]},
  {"year":"2018",
   "category":"medicine",
   "laureates":[
  {"id":"958",
   "firstname":"James P.",
   "surname":"Allison",
   "motivation":"\"for their discovery of cancer therapy by inhibition of negative immune regulation\"",
   "share":"2"},
  {"id":"959",
   "firstname":"Tasuku",
   "surname":"Honjo",
   "motivation":"\"for their discovery of cancer therapy by inhibition of negative immune regulation\"",
  "share":"2"}]}]};

var winners = json.prizes.map(holders=> holders.laureates)
var winner = winners.filter(item => item.id === 963)
console.log(winner);

这个这个json包含数组内的对象数组。我正在尝试获取一个特定的对象。但是在控制台中得到空数组。

[]

【问题讨论】:

  • id 是字符串,所以试试 item.id == 963 或 item.id === '963'

标签: arrays node.js json


【解决方案1】:

首先你应该连接所有的获胜者然后找到你的项目:

var winners = this.json.prizes.reduce((aggr, holders) => (aggr.push(...holders.laureates), aggr), []);
var winner = winners.filter(item => item.id == '963');

【讨论】:

  • 我会使用 find 而不是 filter... data.prizes.reduce((acc, Winners) => (acc.push(...winners.laureates), acc), []) .find(i => i.id === '963')
【解决方案2】:
    var json ={"prizes":[
{"year":"2018",
 "category":"physics",
 "overallMotivation":"\u201cfor groundbreaking inventions in the field of laser physics\u201d",
 "laureates":[
 {"id":"960",
  "firstname":"Arthur",
  "surname":"Ashkin",
  "motivation":"\"for the optical tweezers and their application to biological systems\"","share":"2"},
{"id":"961",
 "firstname":"G\u00e9rard",
 "surname":"Mourou",
 "motivation":"\"for their method of generating high-intensity, ultra-short optical pulses\"",
 "share":"4"},
 {"id":"962",
  "firstname":"Donna",
  "surname":"Strickland",
  "motivation":"\"for their method of generating high-intensity, ultra-short optical pulses\"",
  "share":"4"}]},
  {"year":"2018",
   "category":"chemistry",
  "laureates":[
  {"id":"963",
   "firstname":"Frances H.",
   "surname":"Arnold",
   "motivation":"\"for the directed evolution of enzymes\"",
   "share":"2"},
  {"id":"964",
   "firstname":"George P.",
   "surname":"Smith",
   "motivation":"\"for the phage display of peptides and antibodies\"",
   "share":"4"},
  {"id":"965",
   "firstname":"Sir Gregory P.","surname":"Winter",
   "motivation":"\"for the phage display of peptides and antibodies\"",
   "share":"4"}]},
  {"year":"2018",
   "category":"medicine",
   "laureates":[
  {"id":"958",
   "firstname":"James P.",
   "surname":"Allison",
   "motivation":"\"for their discovery of cancer therapy by inhibition of negative immune regulation\"",
   "share":"2"},
  {"id":"959",
   "firstname":"Tasuku",
   "surname":"Honjo",
   "motivation":"\"for their discovery of cancer therapy by inhibition of negative immune regulation\"",
  "share":"2"}]}]};

var winners = json.prizes.map(holders=> holders.laureates)
//var st=winners[1]
for(var f=0;f<winners.length;f++)
{
for(var c=0;c<winners[f].length;c++)
{
 //console.log(winners[f][c].id=="963")
 if(winners[f][c].id=="963")
{
  var result=winners[f][c];
}
}
}
console.log(result)
//var winner = winners.find(item => item.id == "963")
//console.log(winner);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多