Javascript 嵌套三元运算符
Javascript nested ternary operator
我遗漏了一些东西,如果有人可以向我解释一下。我正在尝试将现有代码重写为三元运算符方式。
我收到以下控制台错误:
Uncaught SyntaxError: Unexpected token }
据我所知,我似乎找不到格式不正确的情况。所以我不确定我遗漏了什么,或者我是否误解了过滤器功能中的某些内容?不是吗? item.verified === true 不应该自动 return 对象是真的吗?
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;
}
});
这是我一直在尝试的 fiddle:
https://jsfiddle.net/phfilly/ya73e325/7/
三元运算符如下所示:
something = (condition) ? a_value : a_different_value;
你忘记了 : a_different_value
最后一个案例。
试试这个
您必须具有@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
所以,现在您可以像这样重写表达式:
this.engagement === 'social-crm' ? item.verified === true :
(this.engagement === 'social' ? item.verified === false :
(this.engagement === 'all' ? item : null))
括号在这里很重要,因为它非常类似于上面的嵌套 if-elses。
还要注意,对于最内层的表达式,else 中的 return 值必须 指定。我已将其设置为空,但您可以 return 任意设置。请注意,这是您的代码失败的实际原因。如果答案很长,我深表歉意,但我想帮助您理解嵌套的三元运算符。
嵌套的三元运算符如下所示:
something = condition ? nested_condition ? value_if_both_conditions_are_true
: value_if_nested_condition_is_false : value_if_condition_is_false;
即使没有括号也能正常工作,但正如其他人所提到的,它可能难以阅读。特别是当检查多个条件时,通过在本例的条件部分使用 &&
或 ||
。
我遗漏了一些东西,如果有人可以向我解释一下。我正在尝试将现有代码重写为三元运算符方式。 我收到以下控制台错误:
Uncaught SyntaxError: Unexpected token }
据我所知,我似乎找不到格式不正确的情况。所以我不确定我遗漏了什么,或者我是否误解了过滤器功能中的某些内容?不是吗? item.verified === true 不应该自动 return 对象是真的吗?
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;
}
});
这是我一直在尝试的 fiddle: https://jsfiddle.net/phfilly/ya73e325/7/
三元运算符如下所示:
something = (condition) ? a_value : a_different_value;
你忘记了 : a_different_value
最后一个案例。
试试这个
您必须具有@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
所以,现在您可以像这样重写表达式:
this.engagement === 'social-crm' ? item.verified === true :
(this.engagement === 'social' ? item.verified === false :
(this.engagement === 'all' ? item : null))
括号在这里很重要,因为它非常类似于上面的嵌套 if-elses。
还要注意,对于最内层的表达式,else 中的 return 值必须 指定。我已将其设置为空,但您可以 return 任意设置。请注意,这是您的代码失败的实际原因。如果答案很长,我深表歉意,但我想帮助您理解嵌套的三元运算符。
嵌套的三元运算符如下所示:
something = condition ? nested_condition ? value_if_both_conditions_are_true
: value_if_nested_condition_is_false : value_if_condition_is_false;
即使没有括号也能正常工作,但正如其他人所提到的,它可能难以阅读。特别是当检查多个条件时,通过在本例的条件部分使用 &&
或 ||
。