繁体   English   中英

从对象数组中,获取特定属性

[英]From an array of objects, get specific properties

我有具有以下结构的 JavaScript object 数组:

  let users = [{
    "id": 9,
    "name": "Sulaymon",
    "family": "Yahyaei",
    "email": "sulaymonhg@etlgr.com",
    "tel": "(91) 247-52-15",
    "isActive": 0,
    "level": "User",
    "email_verified_at": null,
    "created_at": "2019-10-30 04:56:18",
    "updated_at": "2019-10-30 04:56:18"
}, {
    "id": 8,
    "name": "Rasul",
    "family": "Irmatov",
    "email": "Rasul@etlgr.com",
    "tel": "(91) 524-57-96",
    "isActive": 0,
    "level": "User",
    "email_verified_at": null,
    "created_at": "2019-10-24 12:28:45",
    "updated_at": "2019-10-24 12:28:45"
}]

我从我的 object 列中获取对象数组:

let columns = [
  {label: 'Name', name: 'name', show: true},
  {label: 'Family', name: 'family', show: true},
  {label: 'Email', name: 'email', show: true},
  {label: 'Telephone', name: 'tel', show: true},
  {label: 'Level', name: 'level', show: true},
  {label: 'Date Added', name: 'created_at', show: false},
  {label: 'Email Verification', name: 'email_verified_at',show: false},
  {label: 'Updated At', name: 'updated_at', show: false},
  {label: 'Status', name: 'isActive', show: false},
];

如果 show 属性应该是 true 然后得到它,结果应该是这样的:

let userData = [{
    "name": "Sulaymon",
    "family": "Yahyaei",
    "email": "sulaymonhg@etlgr.com",
    "tel": "(91) 247-52-15",
    "level": "User"
}, {
    "name": "Rasul",
    "family": "Irmatov",
    "email": "Rasul@etlgr.com",
    "tel": "(91) 524-57-96",
    "level": "User"
}]

我该怎么办???

 let users = [{ "id": 9, "name": "Sulaymon", "family": "Yahyaei", "email": "sulaymonhg@etlgr.com", "tel": "(91) 247-52-15", "isActive": 0, "level": "User", "email_verified_at": null, "created_at": "2019-10-30 04:56:18", "updated_at": "2019-10-30 04:56:18" }, { "id": 8, "name": "Rasul", "family": "Irmatov", "email": "Rasul@etlgr.com", "tel": "(91) 524-57-96", "isActive": 0, "level": "User", "email_verified_at": null, "created_at": "2019-10-24 12:28:45", "updated_at": "2019-10-24 12:28:45" }] let columns = [ {label: 'Name', name: 'name', show: true}, {label: 'Family', name: 'family', show: true}, {label: 'Email', name: 'email', show: true}, {label: 'Telephone', name: 'tel', show: true}, {label: 'Level', name: 'level', show: true}, {label: 'Date Added', name: 'created_at', show: false}, {label: 'Email Verification', name: 'email_verified_at',show: false}, {label: 'Updated At', name: 'updated_at', show: false}, {label: 'Status', name: 'isActive', show: false}, ]; let userData = []; users.forEach(user => { var obj = {}; columns.forEach(col => { if (col.show) { obj[col.name] = user[col.name] } }); userData.push(obj); }); console.log(userData);

您可以尝试使用mapfilter来实现如下结果

 let users = [{"id": 9,"name": "Sulaymon","family": "Yahyaei","email": "sulaymonhg@etlgr.com","tel": "(91) 247-52-15","isActive": 0,"level": "User","email_verified_at": null,"created_at": "2019-10-30 04:56:18","updated_at": "2019-10-30 04:56:18"}, {"id": 8,"name": "Rasul","family": "Irmatov","email": "Rasul@etlgr.com","tel": "(91) 524-57-96","isActive": 0,"level": "User","email_verified_at": null,"created_at": "2019-10-24 12:28:45","updated_at": "2019-10-24 12:28:45"}], columnsToShow = [{label: 'Name', name: 'name', show: true},{label: 'Family', name: 'family', show: true},{label: 'Email', name: 'email', show: true},{label: 'Telephone', name: 'tel', show: true},{label: 'Level', name: 'level', show: true},{label: 'Date Added', name: 'created_at', show: false},{label: 'Email Verification', name: 'email_verified_at',show: false},{label: 'Updated At', name: 'updated_at', show: false},{label: 'Status', name: 'isActive', show: false}, ].filter(d => d.show).map(d => d.name) let result = users.map(d => Object.assign(...columnsToShow.map(c => ({ [c]: d[c] })))) console.log(result)

 let users = [{ "id": 9, "name": "Sulaymon", "family": "Yahyaei", "email": "sulaymonhg@etlgr.com", "tel": "(91) 247-52-15", "isActive": 0, "level": "User", "email_verified_at": null, "created_at": "2019-10-30 04:56:18", "updated_at": "2019-10-30 04:56:18" }, { "id": 8, "name": "Rasul", "family": "Irmatov", "email": "Rasul@etlgr.com", "tel": "(91) 524-57-96", "isActive": 0, "level": "User", "email_verified_at": null, "created_at": "2019-10-24 12:28:45", "updated_at": "2019-10-24 12:28:45" }]; let columns = [ {label: 'Name', name: 'name', show: true}, {label: 'Family', name: 'family', show: true}, {label: 'Email', name: 'email', show: true}, {label: 'Telephone', name: 'tel', show: true}, {label: 'Level', name: 'level', show: true}, {label: 'Date Added', name: 'created_at', show: false}, {label: 'Email Verification', name: 'email_verified_at',show: false}, {label: 'Updated At', name: 'updated_at', show: false}, {label: 'Status', name: 'isActive', show: false}, ]; users.map((user) => { return columns.filter(column => column.show).reduce((acc, column) => { acc[column.name] = user[column.name]; return acc; }, {}); })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM