2017-06-23 89 views
0

我错过了某些东西,如果有人可以请向我解释。我试图将现有代码重新编写为三元运算符方式。 我得到以下控制台错误:不理解嵌套的三元运算符

Uncaught SyntaxError: Unexpected token }

我的理解有我似乎无法找到格式不正确的条件。所以我不确定我错过了什么,或者如果我可能误解了过滤器功能中的某些内容?不是吗? item.verified === true不假设自动返回真的对象?

var engagement = "social"; 
var audience = [{ 'verified': true, 'name': 'Steve'}, 
       { 'verified': false, 'name': 'Phil'}, 
       { 'verified': true, 'name': 'Jason'}]; 
let data = []; 

data = audience.filter((item) => { 
    (engagement === "social") 
    ? item.verified === true 
    : (engagement === 'social-crm') 
    ? item.verified === false 
    : (engagement === 'all') 
    ? item 
}) 

,我明白的语法:

data = audience.filter((item) => { 
       if (this.engagement === 'social-crm') { 
       return item.verified === true; 
       } else if (this.engagement === 'social') { 
       return item.verified === false; 
       } else if (this.engagement === 'all') { 
       return item; 
       } 
}); 

这是我一直在试图玩弄小提琴: https://jsfiddle.net/phfilly/ya73e325/7/

+2

“我正在尝试将现有代码重新编写为三元运算符方式。” - 别。正如你所注意到的,这很难理解。不要为需要维护代码的人做更多的工作。他们会恨你的。那个人很可能是你,但大概6个月大。 – Quentin

+0

谢谢,我理解并且以同样的方式感受。然而,公司希望纳入标准并告诉我改变它#death – Muppet

+0

发布的代码中存在语法错误。它不能以'?结束? item'。 – RobG

回答

1

烨为指出。你的语法不对。要理解你的代码不工作的原因,如果你稍微重写一下你的代码,这会有所帮助。

if (this.engagement === 'social-crm') { 
    return item.verified === true; 
} else if (this.engagement === 'social') { 
    return item.verified === false; 
} else if (this.engagement === 'all') { 
    return item; 
} 

要这样:

if(this.engagement === 'social-crm') { return item.verified === true; } 
else { 
    if(this.engagement === 'social') {item.verified === false; } 
    else { 
     if(this.engagement === 'all') {return item;} 
    } 
} 

现在,三元运营商遵循类似的嵌套方式。

cond1 ? val1 : (val2) 

val2 => cond2 ? val3 : (val4)

val4 => cond3 ? val5 : val6

所以,现在你可以重写你的表情是这样的:在这里

this.engagement === 'social-crm' ? item.verified === true : 
          (this.engagement === 'social' ? item.verified === false : 
                  (this.engagement === 'all' ? item : null)) 

括号的问题,因为它接近地模拟嵌套如果 - 来自上面的遗传。

另请注意,对于最内表达式,必须指定else 中的返回值。我已将其设置为空,但您可以返回想要的内容。请注意,这是您的代码失败的真正原因。道歉,如果答案很长,但我想帮助你了解嵌套的三元运算符。

+0

感谢您的解释,非常感谢。 – Muppet

+0

没问题... :) –

1

三元运算符是这样的:

something = (condition) ? a_value : a_different_value; 

您忘记了最后一种情况下的: a_different_value

0

试试这个

你必须有一个条件三元操作员通过@Quentin

data = audience.filter((item) => { (engagement === "social") ? 
item.verified === true : (engagement === 'social-crm') ? 
item.verified === false : (engagement === 'all')? 
item : null})