鍍金池/ 問答/HTML/ 如何優(yōu)雅的刪除對(duì)象中的指定屬性?

如何優(yōu)雅的刪除對(duì)象中的指定屬性?

問題:
請(qǐng)教各位大牛,如何優(yōu)雅的刪除如下數(shù)據(jù)結(jié)構(gòu)中的所有created_at,deleted_at,updated_at字段?
圖片描述

在node.js網(wǎng)管層想要干掉這些無用的字段

回答
編輯回答
小眼睛

graphql了解一下?

補(bǔ)充一下
題主的有嵌套結(jié)構(gòu)的created_at,deleted_at等字段,因此我所知的庫都不足以稱之為優(yōu)雅。
當(dāng)然可以通過正則匹配去刪除關(guān)鍵字(如果要?jiǎng)h除其他的無用屬性呢,會(huì)不會(huì)存在有些實(shí)體需要?jiǎng)h除有些不用),或者遍歷屬性遞歸刪除(效率不高),更有甚者可能是a.created_at需要?jiǎng)h除a.b.created_at不需要。
因此我個(gè)人認(rèn)為以schema定義返回結(jié)構(gòu)的方式是最優(yōu)雅的刪除方式。

2017年5月12日 14:57
編輯回答
涼薄

JSON.parse( JSON.stringify( data ).replace( /("created_at":".?",)|("deleted_at":".?",)|(,"updated_at":".*?")/g, '' ) )

只針對(duì)如圖數(shù)據(jù),注意updated_at會(huì)出現(xiàn)在最后一位。

2017年2月5日 12:50
編輯回答
挽歌

使用lodash庫的pick方法,指定返回的屬性

2017年3月19日 22:31
編輯回答
離人歸

要優(yōu)雅的話,使用 Lodash 的 omit 方法移除不要的屬性:

const object = { 'a': 1, 'b': '2', 'c': 3 };
 
const result = _.omit(object, ['a', 'c']);
// => { 'b': '2' }

或者用 pick 方法只留下需要的屬性:

const object = { 'a': 1, 'b': '2', 'c': 3 };
 
const result = _.pick(object, ['a', 'c']);
// => { 'a': 1, 'c': 3 }

當(dāng)然如果你不想用庫或者喜歡動(dòng)手的話,自己實(shí)現(xiàn)一個(gè) omit 也是可以的,實(shí)現(xiàn)方法有很多:

// 中規(guī)中矩式
const omit = (obj, uselessKeys) =>
   Object.keys(obj).reduce((acc, key) =>
      return uselessKeys.includes(key) ?
        acc : 
        {...acc, [key]: acc[key]}
   }, {});


// 投機(jī)取巧式
const omit = (obj, uselessKeys) =>
  uselessKeys.reduce((acc, key) => {
    return {...acc, [key]: undefined}
  }, obj)


// 粗暴式
const omit = (obj, uselessKeys) => {
  uselessKeys.forEach(key => {
    delete obj[key]
  })
  return obj
}

最后是特別粗暴的方法:

delete obj.created_at
delete obj.deleted_at
delete obj.updated_at

希望對(duì)你有幫助

2018年8月17日 12:52
編輯回答
淡墨
用JSON.stringify,看著還算優(yōu)雅。
var d=JSON.parse(JSON.stringify(data,function(key,value){
    if(key=='created_at'||key=='deleted_at'||key=='updated_at'){
      return undefined;
    }else{
      return value;
    }
  }))
2018年3月8日 22:04