从现有 JSON 数组的嵌套 key/values 创建一个新的 JSON 数组

Create a new JSON array from nested key/values of existing JSON array

我有一个对象数组,它的结构总是这样的:

var initialJSON = [  
  {  
     "id":"01",
     "name":"Jane",
     "project":{  
        "title":"Alpha",
        "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "city":"New York"
     },
     "dateCreated":"2018-04-28 04:11:16 UTC"
   },
   {  
     "id":"02",
     "name":"Sarah",
     "project":{  
       "title":"Beta",
       "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
       "city":"London"
     },
      "dateCreated":"2018-04-28 04:11:29 UTC"
    },
    {  
      "id":"03",
      "name":"Mia",
      "project":{  
         "title":"Gamma",
         "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
         "city":"Paris"
      },
      "dateCreated":"2018-04-28 04:11:29 UTC"
   }
];

我的目标是创建一个新的对象数组,其中仅包含每个项目的 key/values 个项目。基本上从每个项目中删除所有其他数据(包括父键 'project')。

最终结果如下所示:

var formattedJSON = [
  {
    "title":"Alpha",
    "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
    "city":"New York"
  },
  {
    "title":"Beta",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
    "city":"London"
  },
  {
    "title":"Gamma",
    "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
    "Paris"
  }
]

我很难找到循环遍历数据并获得正确结果的方法。我知道已经发布了类似的问题,但似乎没有从内部键的嵌套 key/values 中创建一个新数组。

您可以为此使用 Array#map(),方法是将数组的每个元素分配给它的 project 属性:

let initialJSON=[{"id":"01","name":"Jane","project":{"title":"Alpha","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"New York"},"dateCreated":"2018-04-28 04:11:16 UTC"},{"id":"02","name":"Sarah","project":{"title":"Beta","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"London"},"dateCreated":"2018-04-28 04:11:29 UTC"},{"id":"03","name":"Mia","project":{"title":"Gamma","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"Paris"},"dateCreated":"2018-04-28 04:11:29 UTC"}];

let result = initialJSON.map(element => element.project);

console.log(result)

您可以在 initialJSON 数组上使用 map 函数来实现此目的,方法如下:

var formattedJSON = initialJSON.map(item => {

  // For each item in the "initialJSON", map the fields to each item 
  // in the "formattedJSON" array
  return {
    title : item.project.title,
    description : item.project.description,
    city : item.project.city
  }

})

JSON.parse reviver parameter 可用于更改或排除值:

var j = '[{"id":"01","name":"Jane","project":{"title":"Alpha","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"New York"},"dateCreated":"2018-04-28 04:11:16 UTC"},{"id":"02","name":"Sarah","project":{"title":"Beta","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"London"},"dateCreated":"2018-04-28 04:11:29 UTC"},{"id":"03","name":"Mia","project":{"title":"Gamma","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"Paris"},"dateCreated":"2018-04-28 04:11:29 UTC"}]'

let result = JSON.parse(j, (k, v) => v.project || v);

console.log( result )