使用es6 map创建一个对象,它包含空对象



我找了一会儿,但找不到我想要的答案。我有一个很简单的问题,如何摆脱空对象从地图。

const friuts = [{
apple: 'red',
banana: 1
},
{
apple: 'green',
banana: 1
},
{
apple: 'yellow',
banana: 3
}
]
const newObject = friuts.map(e =>
({ ...e.banana === 1 ? {
apple: e.apple
} :
[]
})
)

console.log(newObject)

如果您检查console.log,它在末尾包含一个空对象

[
{
"apple": "red"
},
{
"apple": "green"
},
{} <--- empty 
]

我也试过undefined或以下的代码,但就是不能摆脱空对象。

...e.banana === 1 &&
{
apple: e.apple
}

我知道这可以很容易地通过使用其他方法,如filter。然而,我正在学习Map,所以我想学习如何从地图中摆脱空对象。

抱歉,如果这个问题之前已经问过了。如果问题重复,我将删除。

map不能这样做,它每个输入元素返回一个结果元素。

您可以添加filter链或使用flatMap代替:

const fruits = [
{
apple: 'red',
banana: 1
},
{
apple: 'green',
banana: 1
},
{
apple: 'yellow',
banana: 3
},
]
console.log(fruits.filter(e =>
e.banana === 1
).map(e =>
({
apple: e.apple
})
));
console.log(fruits.flatMap(e =>
e.banana === 1
? [{
apple: e.apple
}]
: []
));

const newObject = friuts.map(e => {
return e.banana === 1 ? { apple: e.apple } : {}
}).filter(e => Object.keys(e).length > 0)

console.log(newObject)

为什么不这样做呢?这里没有使用展开运算符的意义

最新更新