-
眼眸繁星
您可以删除所有虚假值并只迭代一次: const settings = { distance: null, length: 23, weight: null, isActive: false, isRound: true } const data = {}; Object.entries(settings) .forEach(([key, value]) => { if(!!value) { data[key]= value; } }) console.log(data);
-
largeQ
在香草 javscript 中,在单个循环中会更容易const settings = { distance: null, length: 23, weight: null, isActive: false, isRound: true}const data = {}for(var key in settings) { if(settings[key] !== false && settings[key] !== null) { data[key] = settings[key]; }}不确定为什么要使用多种过滤方法并减少,因为它会导致额外的迭代。
-
繁星点点滴滴
使用 reducer 代替你的 怎么样forEach?const settings = { distance: null, length: 23, weight: null, isActive: false, isRound: true}const data = Object.entries(settings) .filter(([, value]) => value !== null && value !== false) .reduce((acc, [key, value]) => { (acc[key] = value); return acc; }, {}); console.log(data);
-
UYOU
作为替代方案,这里有一些可以说更简单但不是功能性版本,它使用可变性来删除有问题的键:const settings = { distance: null, length: 23, weight: null, isActive: false, isRound: true}const copy = Object.assign({}, settings);Object.entries(copy).forEach(([key, value]) => { if (value === null || value === false) delete copy[key];});console.log(copy);如果符合您的口味,可短一点。
-
MMMHUHU
你为什么不在一次迭代中检查这些条件改变这个.filter(([, value]) => value !== null).filter(([, value]) => value !== false)到.filter(([, value]) => !!value)或使用单循环检查条件并在数据对象中附加数据,例如:Object.entries(settings) .forEach(([key, value]) => { if(!!value) { data[key]= value; } })