js对象里面的数组问题

我是新手,每个人水平不一样。不喜勿喷。不知道来踩我的是何居心。你厉害完了?这里只能问高深的问题?也许是我太笨了。我也是想了很久也想不出来。查了资料也没有看懂。很多思路是晕的。我难道不能问吗?

后台传来的result里面有很多条数据,每条数据里面的categories是个数组。有些是空,有些是多条数据。

我只想获取每个数据里面的{id,name,description,categories.name,createTime}

这里面的categories是个数组。只需要里面的name的数据。
除了categories里面的name值是未定义。
其余数据都是正常显示的。
请问categories里面的name怎样取出来呢?
需要整体取出来,不止是只取categories里面的name我是这样写的。我不知道categories数组里的数据怎么处理:
image.png
image.png
image.png

` "result": [

{
  "id": 1,
  "creatorId": 1,
  "categories": [
    
  ],
  "name": "first exam repo",
  "description": "just for test",
  "createTime": "2020-02-13 14:44:13",
  "personal": false,
  "exams": null
},{
  "id": 40,
  "creatorId": 4,
  "categories": [
    {
      "id": 5,
      "creatorId": 1,
      "name": "标签1",
      "description": "",
      "createTime": "2020-02-16 20:01:25"
    },
    {
      "id": 6,
      "creatorId": 1,
      "name": "标签2",
      "description": "",
      "createTime": "2020-02-16 20:01:25"
    },
    {
      "id": 7,
      "creatorId": 1,
      "name": "标签3",
      "description": "",
      "createTime": "2020-02-16 20:01:25"
    },
    {
      "id": 10,
      "creatorId": 4,
      "name": "这种",
      "description": "",
      "createTime": "2020-02-16 21:50:15"
    }
  ],
  "name": "这种",
  "description": "这种",
  "createTime": "2020-02-16 21:50:15",
  "personal": false,
  "exams": null
}]`
阅读 2.1k
2 个回答

表述太迷了,但是我好像猜出来了

const arr = [];
result.forEach(obj => {
  arr.push({
    id: obj.id,
    name: obj.name,
    description: obj.description,
    cate_name: obj.categories.map(cat => cat.name).join(),
    createTime: obj.createTime
  });
});
console.log(arr);
// output
[[object  Object]  {  
  cate_name:  "",  
  createTime:  "2020-02-13 14:44:13",  
  description:  "just for test",  
  id:  1,  
  name:  "first exam repo"  
},  [object  Object]  {  
  cate_name:  "标签1,标签2,标签3,这种",  
  createTime:  "2020-02-16 21:50:15",  
  description:  "这种",  
  id:  40,  
  name:  "这种"  
}]

image.png

这样?

var names = result
    .flatMap(e => e.categories)
    .flatMap(e => e.name);

PS. Array.prototype.flapMap 是 ES10 新特性,项目中使用最好 polyfill。


也有基于 Array.prototype.reduce 的方法:

image.png

var names = result
    .reduce((prev, next) => prev.categories.concat(next.categories))
    .map(e => e.name);

最简单的 for 循环就不用教了吧……

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题