考虑遵循代码
const filterArray = ['a', 'b']
const objectToBeFilter = {
a: {
ab: 'ab',
ac: 'ac',
ad: 'ad'
},
b: {
bb: 'bb',
bc: 'bc',
bd: 'bd'
},
c: {
cb: 'cb',
cc: 'cc',
cd: 'cd'
}
}
const resultWantToGet = [
a: {
ab: 'ab',
ac: 'ac',
ad: 'ad'
},
b: {
bb: 'bb',
bc: 'bc',
bd: 'bd'
}
]
FilterArray
是要用作过滤器索引的数组,objectToBeFilter
是我要处理的对象。如何使用filterArray过滤objectToBeFilter,然后将其转换为数组resultWantToGet
?
答案 0 :(得分:1)
您可以map
filterArray
并传播到一个新对象中:
const filterArray = ['a', 'b']
const objectToBeFilter = {
a: {
ab: 'ab',
ac: 'ac',
ad: 'ad'
},
b: {
bb: 'bb',
bc: 'bc',
bd: 'bd'
},
c: {
cb: 'cb',
cc: 'cc',
cd: 'cd'
}
};
console.log({
...filterArray.map(key => ({ [key]: objectToBeFilter[key] }))
});
或者,如果您不想创建中间对象,请使用reduce
:
const filterArray = ['a', 'b']
const objectToBeFilter = {
a: {
ab: 'ab',
ac: 'ac',
ad: 'ad'
},
b: {
bb: 'bb',
bc: 'bc',
bd: 'bd'
},
c: {
cb: 'cb',
cc: 'cc',
cd: 'cd'
}
};
console.log(filterArray.reduce((a, prop) => {
a[prop] = objectToBeFilter[prop];
return a;
}, {}));
答案 1 :(得分:1)
您可以使用type(matrix)
循环并构造新对象。
reduce
答案 2 :(得分:1)
您可以使用以下代码Object.keys(objectToBeFilter)
获取已过滤对象键的列表,然后过滤器数组.filter(key => filterArray.includes(key))
中包含的过滤键,然后仅使用已过滤属性reduce((obj, key)
构造新对象>
const filterArray = ['a', 'b']
const objectToBeFilter = {
a: {
ab: 'ab',
ac: 'ac',
ad: 'ad'
},
b: {
bb: 'bb',
bc: 'bc',
bd: 'bd'
},
c: {
cb: 'cb',
cc: 'cc',
cd: 'cd'
}
}
const resultWantToGet = Object.keys(objectToBeFilter)
.filter(key => filterArray.includes(key))
.reduce((obj, key) => {
obj[key] = objectToBeFilter[key];
return obj;}, {});
console.log(resultWantToGet)
答案 3 :(得分:1)
根据您的最新评论,您似乎想要一个对象数组。您可以轻松地做到这一点,它将为您提供数组中键为objectToBeFilter
和a
的{{1}}中的对象:
b
这看起来与预期结果不同,因为数组没有键。如果要用键标识每个项目,则可能需要一个对象,但是如果要有序集合,则可以使用数组。