我想知道是否可以在数组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;
};
答案 0 :(得分:2)
您可以将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));
答案 1 :(得分:0)
为什么不只是:
countries.push({
value: key,
name: country.name,
provinceCodes: country.provinceCodes
});
如果country.provinceCodes不存在,则只需将新对象中的键设置为undefined,这与大多数情况下未设置键一样好。
答案 2 :(得分:0)
无论如何,您都需要一个条件语句。可能会减少代码长度:
const generateCountriesArray = (countriesObject) => {
const countries = [];
for (var key in countriesObject) {
var country = countriesObject[key];
var newObject = {
value: key,
name: country.name
};
if (country.provinceCodes !== 'undefined') {
newObject.provinceCodes = country.provinceCodes;
}
countries.push(newObject);
}
return countries;
}
我还看到您正在使用const
,所以也许您可以使用ES6语法,例如
const generateCountriesArray = countriesObject => countriesObject.map((country, key) => {
const newObject = {
value: key,
name: country.name
};
if (country.provinceCodes !== 'undefined') {
newObject.provinceCodes = country.provinceCodes;
}
return newObject;
});
另一个问题,您真的需要进行检查吗?在大多数情况下,您只需留下键undefined
。在这种情况下,ES6代码如下所示:
const generateCountriesArray = countriesObject => countriesObject.map((country, key) => ({
value: key,
name: country.name,
provinceCodes: country.provinceCodes, // here the key migth be undefined
});
但是,如果您确实要从新对象中排除未定义的键,请尝试
const generateCountriesArray = countriesObject => countriesObject.map((country, key) => ({
value: key,
name: country.name,
...(country.provinceCodes !== undefined && { provinceCodes: country.provinceCodes })
});
答案 3 :(得分:0)