如何过滤给定部分路径的对象?
举个例子。
let address = {
country :{
name:'Japan',
city:{
name:'Tokyo',
town: {
name:'korushawa'
}
},
code:'JP'
},
nearbyCountry:'Korea'
}
Run Code Online (Sandbox Code Playgroud)
路径1:countr.cit
对于address,path1 将导致
{
country :{
city:{
name:'Tokyo',
town: {
name:'korushawa'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于path2,我应该得到整个address对象,因为countr存在于country和nearbyCountry
{
country :{
name:'Japan',
city:{
name:'Tokyo',
town: {
name:'korushawa'
}
}
},
nearbyCountry:'Korea'
}
Run Code Online (Sandbox Code Playgroud)
编辑:当给出确切的路径(例如:)时,我已经能够解决这个问题country.city。但是在部分路径上有困难。
这种方法依赖于过滤条目并通过映射具有单个属性的对象来重建新对象。
function getParts(object, fragments) {
var [part, ...rest] = fragments.split('.');
return Object.assign({}, ...Object
.entries(object)
.filter(([key]) => key.toLowerCase().includes(part))
.map(([k, v]) => {
if (!rest.length) return { [k]: v };
var parts = v && typeof v === 'object' && getParts(v, rest.join('.'));
if (parts) return { [k]: parts };
})
);
}
let address = { country: { name: 'Japan', city: { name: 'Tokyo', town: { name: 'korushawa' } }, code: 'JP' }, nearbyCountry: 'Korea' };
console.log(getParts(address, 'countr.cit'));
console.log(getParts(address, 'countr'));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |