Javascript嵌套三元运算符

Javascript嵌套三元运算符,javascript,conditional-operator,Javascript,Conditional Operator,如果有人能给我解释一下,我遗漏了一些东西。我试图用三元运算符的方式重新编写现有代码。 我收到以下控制台错误: 未捕获的语法错误:意外标记} 我知道有一个条件格式不正确,我似乎找不到。所以我不确定我遗漏了什么,或者我是否可能误解了过滤函数中的某些内容?不是吗?item.verified==true不自动返回为true的对象吗 var engagement = "social"; var audience = [{ 'verified': true, 'name': 'Steve'},

如果有人能给我解释一下,我遗漏了一些东西。我试图用三元运算符的方式重新编写现有代码。 我收到以下控制台错误:

未捕获的语法错误:意外标记}

我知道有一个条件格式不正确,我似乎找不到。所以我不确定我遗漏了什么,或者我是否可能误解了过滤函数中的某些内容?不是吗?item.verified==true不自动返回为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;
              }
});
这是我一直想玩的小提琴:

三元运算符如下所示:

something = (condition) ? a_value : a_different_value;
this.engagement === 'social-crm' ? item.verified === true : 
                             ( this.engagement === 'social' ? item.verified === false : 
                                                             (this.engagement === 'all' ?  item : null))

您忘记了
:上一个案例中的值不同。

三元运算符如下所示:

something = (condition) ? a_value : a_different_value;
this.engagement === 'social-crm' ? item.verified === true : 
                             ( this.engagement === 'social' ? item.verified === false : 
                                                             (this.engagement === 'all' ?  item : null))
您忘记了
:在最后一个案例中有一个不同的值。

试试这个

必须有@Quentin所指出的三元运算符的条件

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

必须有@Quentin所指出的三元运算符的条件

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

是的。你的语法不对。为了理解代码不起作用的原因,如果您重新编写
if-else
语句会有所帮助

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

那么,现在你可以像这样重写你的表达式:

something = (condition) ? a_value : a_different_value;
this.engagement === 'social-crm' ? item.verified === true : 
                             ( this.engagement === 'social' ? item.verified === false : 
                                                             (this.engagement === 'all' ?  item : null))
括号在这里很重要,因为它与上面嵌套的if-else非常相似


还要注意,对于最内部的表达式,必须在else中指定返回值。我已将其设置为null,但您可以返回所需的内容。请注意,这是代码失败的实际原因。如果答案很长,我很抱歉,但我想帮助您理解嵌套三元运算符

是的。你的语法不对。为了理解代码不起作用的原因,如果您重新编写
if-else
语句会有所帮助

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

那么,现在你可以像这样重写你的表达式:

something = (condition) ? a_value : a_different_value;
this.engagement === 'social-crm' ? item.verified === true : 
                             ( this.engagement === 'social' ? item.verified === false : 
                                                             (this.engagement === 'all' ?  item : null))
括号在这里很重要,因为它与上面嵌套的if-else非常相似


还要注意,对于最内部的表达式,必须在else中指定返回值。我已将其设置为null,但您可以返回所需的内容。请注意,这是代码失败的实际原因。如果答案很长,我很抱歉,但我想帮助您理解嵌套三元运算符

“我正试图以三元运算符的方式重新编写现有代码。”-不要。正如你所注意到的,这很难理解。不要为维护代码的人做更多的工作。他们会因此恨你的。那个人很可能是你,但比你大6个月。谢谢,我也有同感。然而,公司想要合并标准,并告诉我要更改它#death你可以更改为这个数据=受众。过滤器((项目)=>(参与==“社交”)?项目。验证===true:(参与=='social crm')?项目。验证===false:(参与=='all')?项目:null)@RobG所以在其他情况下,我想再次返回整个对象。这有意义吗?
过滤器
函数需要真实或错误的返回值。返回
true
会产生相同的结果@昆汀有史以来最好的评论:)“我正试图以三元运算符的方式重新编写现有代码。”-不要。正如你所注意到的,这很难理解。不要为维护代码的人做更多的工作。他们会因此恨你的。那个人很可能是你,但比你大6个月。谢谢,我也有同感。然而,公司想要合并标准,并告诉我要更改它#death你可以更改为这个数据=受众。过滤器((项目)=>(参与==“社交”)?项目。验证===true:(参与=='social crm')?项目。验证===false:(参与=='all')?项目:null)@RobG所以在其他情况下,我想再次返回整个对象。这有意义吗?
过滤器
函数需要真实或错误的返回值。返回
true
会产生相同的结果@昆汀有史以来最好的评论:)