简体   繁体   中英

From an array of objects, get specific properties

I have JavaScript object array with the following structure:

  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"
}]

I what get array of objects from my Column 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},
];

if show property should be true then get it and result should be like this:

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"
}]

What do i do???

 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);

You can try using map and filter to achieve the result as below

 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; }, {}); })

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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