Javascript 重构基于键/值对的值进行筛选的代码

Javascript 重构基于键/值对的值进行筛选的代码,javascript,Javascript,我有以下代码,正如预期的那样工作——它正确地过滤掉值为null、false的键/值对,并返回一个包含其他键/值对的对象。然而,它相当冗长,我想知道是否有一种方法可以简化它 常量设置={ 距离:空, 长度:23, 权重:空, I:错, 以色列:是的 } 常量数据={}; Object.entriessettings .filter[,value]=>value!==无效的 .filter[,value]=>value!==错误的 .forEach[键,值]=>数据[键]=值; 控制台日志数据 用

我有以下代码,正如预期的那样工作——它正确地过滤掉值为null、false的键/值对,并返回一个包含其他键/值对的对象。然而,它相当冗长,我想知道是否有一种方法可以简化它

常量设置={ 距离:空, 长度:23, 权重:空, I:错, 以色列:是的 } 常量数据={}; Object.entriessettings .filter[,value]=>value!==无效的 .filter[,value]=>value!==错误的 .forEach[键,值]=>数据[键]=值;
控制台日志数据 用减速机代替你的forEach怎么样

常量设置={ 距离:空, 长度:23, 权重:空, I:错, 以色列:是的 } 常量数据=Object.entriessettings .filter[,value]=>value!==空值和值!==错误的 .reduceAC[键,值]=>{ acc[键]=值; 返回acc; }, {};
控制台日志数据 在脚本中,在单个循环中会更容易

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];
    }
}

不确定为什么要使用多个筛选方法并减少,因为这将导致额外的迭代。

您可以删除所有falsy值并只迭代一次:

常量设置={ 距离:空, 长度:23, 权重:空, I:错, 以色列:是的 } 常量数据={}; Object.entriessettings .forEach[键,值]=>{ 如果!!值{ 数据[键]=值; } }
控制台日志数据 作为替代方案,这里有一个可以说更简单但不是功能性的版本,它使用可变性删除有问题的键:

常量设置={ 距离:空, 长度:23, 权重:空, I:错, 以色列:是的 } const copy=Object.assign{},设置; Object.entriescopy.forEach[键,值]=>{ 如果值===null | |值===false删除复制[键]; };
控制台。日志副本 为什么不在一次迭代中检查这些条件

改变这个

.filter(([, value]) => value !== null)
.filter(([, value]) => value !== false)

或者使用检查条件并在数据对象中附加数据的单循环 例如:


过滤器和reduce方法是vanilla javascript的一部分,不使用多个过滤器不会导致额外的迭代。谢谢,没错,java和其他语言中没有惰性计算。
.filter(([, value]) => !!value)
Object.entries(settings)
      .forEach(([key, value]) => {
        if(!!value) {
          data[key]= value;       
        }
     })