我编写了下面的函数来返回与特定模式匹配的对象中的所有键.它看起来真的很圆,因为在lodash对象中没有过滤器功能,当你使用它时,所有的键都会丢失.这是使用lodash过滤对象键的唯一方法吗?
- export function keysThatMatch (pattern) {
- return (data) => {
- let x = _.chain(data)
- .mapValues((value,key) => {
- return [{
- key: key,value: value
- }]
- })
- .values()
- .filter(data => {
- return data[0].key.match(pattern)
- })
- .zipWith(data => {
- let tmp = {}
- tmp[data[0].key] = data[0].value
- return tmp
- })
- .value()
- return _.extend.apply(null,x)
- }
- }
解决方法
我不认为你需要lodash,我只会使用Object.keys,过滤匹配然后减少回到这样的对象(未经测试,但应该工作):
- export function keysThatMatch (pattern) {
- return (data) => {
- return Object.keys(data).filter((key) => {
- return key.match(pattern);
- }).reduce((obj,curKey) => {
- obj[curKey] = data[curKey];
- return obj;
- });
- }
- }