5 回答

TA貢獻1873條經驗 獲得超9個贊
您可以刪除所有虛假值并只迭代一次:
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);

TA貢獻2039條經驗 獲得超8個贊
在香草 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];
}
}
不確定為什么要使用多種過濾方法并減少,因為它會導致額外的迭代。

TA貢獻1803條經驗 獲得超3個贊
使用 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);

TA貢獻1878條經驗 獲得超4個贊
作為替代方案,這里有一些可以說更簡單但不是功能性版本,它使用可變性來刪除有問題的鍵:
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);
如果符合您的口味,可短一點。

TA貢獻1834條經驗 獲得超8個贊
你為什么不在一次迭代中檢查這些條件
改變這個
.filter(([, value]) => value !== null)
.filter(([, value]) => value !== false)
到
.filter(([, value]) => !!value)
或使用單循環檢查條件并在數據對象中附加數據,例如:
Object.entries(settings)
.forEach(([key, value]) => {
if(!!value) {
data[key]= value;
}
})
添加回答
舉報