在forEach里面的箭头函数里面的三元运算符

时间:2017-05-08 17:04:13

标签: javascript arrays function foreach arrow-functions

我有这个小函数应该用偶数值删除对象属性。

function removeEvenValues(obj) {
  Object.keys(obj).forEach(k => ((!isNaN(obj[k])) && (obj[k] % 2 === 0)) ? delete obj[k] : k);
}

在三元运算符的else {}部分中,如何将其留空,就像在if (true){ doSomething();}类型的构造中一样?或者在这种情况下使用胖箭头功能是否有意义?

4 个答案:

答案 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