我有以下任务,拥有一个具有此结构的对象数组
{
fullName: 'Some Name',
datashow: '1',
classroom: 'C101',
audio: true,
cpu: false,
internet: false,
pointer: true,
screen: false,
description: 'Lorem ipsum dolor sit amet',
blocks: '1,2'
}
需要将其转化为:
{
audio: true,
pointer: true,
description: 'Lorem ipsum dolor sit amet'
}
遵循以下条件:
现在我正在使用此解决方案目前正在以这种方式工作,但我想要一个更快,更优雅的解决方案:
function reduceActivity(activity) {
const newObject = {};
for (key in activity) {
if (key !== 'fullName' && key !== 'datashow' && key !== 'blocks' ) {
if (activity[key]) {
newObject[key] = activity[key];
}
}
}
return newObject;
}
感谢您的任何帮助或建议
答案 0 :(得分:2)
试试这个解决方案。关于性能没有实际的变化,在这种情况下你不必担心,但是在这个解决方案中,你给出的keys
必须被排除在数组中并使用数组来检查密钥。
const obj = {
fullName: 'Some Name',
datashow: '1',
classroom: 'C101',
audio: true,
cpu: false,
internet: false,
pointer: true,
screen: false,
description: 'Lorem ipsum dolor sit amet',
blocks: '1,2'
};
const excludeKeys = ['fullName', 'datashow', 'blocks', 'classroom'];
const mappedObj = Object.keys(obj).reduce((o, item) => {
if( !excludeKeys.includes(item) && obj[item]) {
o[item] = obj[item];
}
return o;
}, {});
console.log(mappedObj);

使用此代码中的解决方案
for(key in activity)
如果您的对象具有prototype
属性,则可能会出现一些逻辑问题。 key in activity
也会为您提供可枚举的原型属性。
答案 1 :(得分:1)
如果要忽略某个键,您可以检查一个对象。然后检查它以及检查proerties值并提前返回。
function reduceActivity(activity) {
var ignoreKeys = { fullName: true, classroom: true, datashow: true, blocks: true },
newObject = {};
Object.keys(activity).forEach(function (key) {
if (ignoreKeys[key] || !activity[key]) {
return;
}
newObject[key] = activity[key];
});
return newObject;
}
答案 2 :(得分:0)
太晚了........
var fields =['classroom', 'audio', 'cpu', 'internet','pointer','screen','description']
var arr = [
{
fullName: 'Some Name',
datashow: '1',
classroom: 'C101',
audio: true,
cpu: false,
internet: false,
pointer: true,
screen: false,
description: 'Lorem ipsum dolor sit amet',
blocks: '1,2'
},
{
fullName: 'Some Name',
datashow: '1',
classroom: 'C101',
audio: true,
cpu: false,
internet: false,
pointer: true,
screen: false,
description: 'Lorem ipsum dolor sit amet',
blocks: '1,2'
},
{
fullName: 'Some Name',
datashow: '1',
classroom: false,
audio: false,
cpu: false,
internet: false,
pointer: false,
screen: false,
description: false,
blocks: '1,2'
}
]
var ret = arr.reduce((acc, obj)=>{
var o={}
fields.forEach(f => {
if (obj[f] === true || obj[f].length > 0 || obj[f] === 0) o[f]=obj[f]
})
if(Object.keys(o).length === 0)
return acc
else
acc.push(o)
return acc
},[])
console.log(ret)