es6删除对象的属性_在ES6中通过键过滤对象属性

如果您有一个允许的值列表,您可以使用以下方法轻松地将其保留在一个对象中:

const raw = { item1: { key: 'sdfd', value:'sdfd' }, item2: { key: 'sdfd', value:'sdfd' }, item3: { key: 'sdfd', value:'sdfd' } }; const allowed = ['item1', 'item3']; const filtered = Object.keys(raw) .filter(key => allowed.includes(key)) .reduce((obj, key) => { obj[key] = raw[key]; return obj; }, {}); console.log(filtered);

如果你使用ES6语法还行,我发现最干净的方法就是这样做,如下所示:

const data = { item1: { key: 'sdfd', value:'sdfd' }, item2: { key: 'sdfd', value:'sdfd' }, item3: { key: 'sdfd', value:'sdfd' } }; const { item2, ...newData } = data;

现在, newData包含:

{ item1: { key: 'sdfd', value:'sdfd' }, item3: { key: 'sdfd', value:'sdfd' } };

或者,如果您将密钥存储为string:

const key = 'item2'; const { [key]: _, ...newData } = data;

在后一种情况下, [key]被转换为item2但是由于您使用的是const赋值,因此需要为赋值指定一个名称。 _代表一个扔掉的价值。

更普遍:

const { item2, ...newData } = data; // Assign item2 to item2 const { item2: someVarName, ...newData } = data; // Assign item2 to someVarName const { item2: _, ...newData } = data; // Assign item2 to _ const { ['item2']: _, ...newData } = data; // Convert string to key first, ...

这不仅可以将您的操作减less到一行,而且也不需要您知道其他键(您要保留的键)。

你可以添加一个通用的ofilter (用通用的oreduce实现),所以你可以很容易地过滤对象的方式,你可以数组。

const oreduce = (f, acc, o)=> Object.keys(o).reduce((acc, k)=> f(acc, o[k], k, o), acc) const ofilter = (f, o)=> oreduce ((acc, v, k, o)=> f(v, k, o) ? Object.assign(acc, {[k]: v}) : acc, {}, o) let data = { item1: { key: 'sdfd', value:'sdfd' }, item2: { key: 'sdfd', value:'sdfd' }, item3: { key: 'sdfd', value:'sdfd' } } // filter data where k ("key") is not equal to 'item2' let result = ofilter ((v,k)=> k !== 'item2', data) console.log(result)

你可以find最清洁的方式是用Lodash#pick

const _ = require('lodash); const allowed = ['item1', 'item3']; const obj = { item1: { key: 'sdfd', value:'sdfd' }, item2: { key: 'sdfd', value:'sdfd' }, item3: { key: 'sdfd', value:'sdfd' } } const filteredObj = _.pick(obj, allowed)

最近我这样做了:

const dummyObj = Object.assign({}, obj); delete dummyObj[key]; const target = Object.assign({}, {...dummyObj});

没有之前没有提到的,但是将一些答案与一般的ES6答案结合起来:

const raw = { item1: { key: 'sdfd', value: 'sdfd' }, item2: { key: 'sdfd', value: 'sdfd' }, item3: { key: 'sdfd', value: 'sdfd' } }; const filteredKeys = ['item1', 'item3']; const filtered = filteredKeys .reduce((obj, key) => ({ ...obj, [key]: raw[key] }), {}); console.log(filtered);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值