我想知道是否有一种方法可以在数组push方法中添加条件?我只希望将'provinceCodes'属性添加到对象中(如果存在)。而不是在下面的if / else中执行此操作...我想知道是否有更清洁的方法?
const generateCountriesArray = (countriesObject) => {
const countries = [];
for (var key in countriesObject) {
var country = countriesObject[key];
if (typeof(country.provinceCodes) !== 'undefined')
{
countries.push({
value: key,
name: country.name,
provinceCodes: country.provinceCodes
});
}
else
{
countries.push({
value: key,
name: country.name
});
}
}
return countries;
};
最佳答案
您可以将object spread与short-circuit evaluation一起使用。如果表达式provinceCodes !== undefined
的结果为true
,则短路将求值到包含provinceCodes
的对象,并且价差会将属性provinceCodes
添加到结果对象。如果不是,则表达式的计算结果为false
。 false
将被丢弃。
const generateCountriesArray = (countriesObject) => {
const countries = [];
for (var k in countriesObject) {
var { key, name, provinceCodes } = countriesObject[k];
countries.push({
value: key,
name,
...provinceCodes !== undefined && { provinceCodes }
});
}
return countries;
};
const countriesObject = {
a: { key: 1, name: 1, provinceCodes: 1 },
b: { key: 2, name: 2 },
};
console.log(generateCountriesArray(countriesObject));