猿问

重构基于键/值对值过滤的代码

我有以下代码,它按预期工作 - 它正确地过滤掉值为 null、false 的键/值对,并返回具有其他键/值对的对象。但是,它相当冗长,我想知道是否有办法简化它。


const settings = {

    distance: null,

    length: 23,

    weight: null,

    isActive: false,

    isRound: true

}


const data = {};

Object.entries(settings)

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

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

.forEach(([key, value]) => (data[key] = value));

      

console.log(data);


慕标5832272
浏览 130回答 5
5回答

眼眸繁星

您可以删除所有虚假值并只迭代一次:    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;               }     })
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答