我有这个小函数应该用偶数值删除对象属性。
function removeEvenValues(obj) {
Object.keys(obj).forEach(k => ((!isNaN(obj[k])) && (obj[k] % 2 === 0)) ? delete obj[k] : k);
}
在三元运算符的else {}部分中,如何将其留空,就像在if (true){ doSomething();}
类型的构造中一样?或者在这种情况下使用胖箭头功能是否有意义?
答案 0 :(得分:2)
是的,你不应该在这里使用简洁的箭头函数或三元运算符。好吧,你could use &&
instead of the ternary,但你真的不应该。
你shouldn't even use forEach
in ES6 - 只需使用正确的循环:
function removeEvenValues(obj) {
for (const k of Object.keys(obj))
if (!isNaN(obj[k]) && obj[k] % 2 === 0)
delete obj[k];
}
或(因为你可能不关心继承的属性)
function removeEvenValues(obj) {
for (const k in obj)
if (!isNaN(obj[k]) && obj[k] % 2 === 0)
delete obj[k];
}
答案 1 :(得分:1)
使用胖箭头没有任何问题,因为它是一个函数表达式,但由于您没有返回值,因此不应使用三元运算符。你可以这样做:
function removeEvenValues(obj) {
Object.keys(obj).forEach(k => {if(!isNaN(obj[k]) && (obj[k] % 2 === 0)) {delete obj[k]}});
}
答案 2 :(得分:1)
您可以使用logical AND &&
并删除一些多余的括号。
function removeEvenValues(obj) {
Object.keys(obj).forEach(k => !isNaN(obj[k]) && obj[k] % 2 === 0 && delete obj[k]);
}
var o = { foo: 41, bar: 42 };
removeEvenValues(o);
console.log(o);
答案 3 :(得分:0)
正如Nina所写,您可以使用逻辑运算符而不是三元运算符。您也可以调整条件并使用12345 /the/provided/path
。
请注意||
返回的内容。例如isNaN
!因此,您可能希望使用isNaN([2]) === false
来测试原始数字类型。
最后,最近typeof
方法已经在某些浏览器中找到了方法,在这种情况下,使用它代替Object.entries
会很好:
Object.keys