如何在javascript对象中进行模式匹配

如何在javascript对象中进行模式匹配,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,对于以下问题,我是否可以在javascript中使用lodash方法进行模式匹配 我有键=[x,y,z]和对象={x:'a',x0:'a0',y:'b',y0:'b1',y1:'c',k:'k',k1:'k1'..} 我需要得到的结果是{x:a',x0:a0',y:b',y0:b1',y1:c'} 基本上,我需要给出一个键数组和一个对象,它应该返回一个包含所有键的对象,这些键中有一个选择的键作为子串。不知道有任何lodash方法可以这样做,但它没有那么复杂: const keys = ['x',

对于以下问题,我是否可以在javascript中使用lodash方法进行模式匹配

我有键=
[x,y,z]
和对象=
{x:'a',x0:'a0',y:'b',y0:'b1',y1:'c',k:'k',k1:'k1'..}

我需要得到的结果是
{x:a',x0:a0',y:b',y0:b1',y1:c'}


基本上,我需要给出一个键数组和一个对象,它应该返回一个包含所有键的对象,这些键中有一个选择的键作为子串。

不知道有任何lodash方法可以这样做,但它没有那么复杂:

const keys = ['x', 'y', 'z'];
const obj = { x: 'a', x0: 'a0', y: 'b' ,y0:'b1', y1:'c' };
const matched = keys.reduce((acc, key) => {
  Object.entries(obj)
    .filter(([k]) => k.includes(key))
    .forEach(([k, v]) => (acc[k] = v));
  return acc;
}, {});

不确定lodash的情况,但您可以使用本机JavaScript非常简单地做到这一点:

const key=['x','y','z'];
常量对象={x:'a',x0:'a0',y:'b',y0:'b1',y1:'c',k:'k',k1:'k1'};
const validEntries=Object.entries(Object)
.filter(([key,val])=>key.some(k=>key.includes(k));
const result=Object.fromEntries(validEntries);

控制台日志(结果)您可以迭代对象的键并检查键数组

const key=['x','y','z']
常量对象={x:'a',x0:'a0',y:'b',y0:'b1',y1:'c',k:'k',k1:'k1'}
//结果为={x:'a',x0:'a0',y:'b',y0:'b1',y1:'c'}
const result=Object.keys(Object.reduce)(acc,rec)=>{
//如果当前键具有键数组中任何值的子字符串
if(keys.filter(it=>rec.indexOf(it)>-1).length>0){
返回{…acc[rec]:对象[rec]}
}
返回acc
}, {})
log(result)
您可以将but与自定义谓词一起使用

const key=['x','y','z'];
常量对象={x:'a',x0:'a0',y:'b',y0:'b1',y1:'c',k:'k',k1:'k1'};
const filtered=u.pickBy(object,(value,key)=>keys.some(k=>key.includes(k));
console.log(过滤)