将稍微复杂的 "if" 语句转换为三元运算符

convert slightly complex "if" statement to ternary operator

我有以下项目代码:

setTweetLibrary((curr) => {
    if (!curr[0] || (curr[0] && curr[0].id !== saved_tweets[0].id)) {
        console.log("update");
        return saved_tweets;
    } else {
        console.log("not update");
        return curr;
    }
});

我想将其转换为带有问号(“?”)的三元运算符以使其更整洁,但我不知道如何操作。谁能建议?谢谢!

我想我真的很困惑具有多个条件和值的三元运算符的语法

作为三元,它看起来像这样:

setTweetLibrary((curr) => {
      return !curr[0] || (curr[0] && curr[0].id !== saved_tweets[0].id)
        ? saved_tweets
        : curr;
});

请注意,console.logs 没有更多位置。但他们似乎无论如何都在调试。

三元运算符不是 if 语句的通用替代品,仅用于在到达相同目的地的表达式之间进行选择。

如果我们去掉日志记录,两个分支都返回一个变量:

if (!curr[0] || (curr[0] && curr[0].id !== saved_tweets[0].id)) {
    return saved_tweets;
} else {
    return curr;
}

条件是长表达式的事实没有任何区别,它仍然等同于:

if (some_condition_goes_here) {
    return saved_tweets;
} else {
    return curr;
}

在这种情况下,您可以使用三元运算符在两者之间 select - 将 return 移动到 if 所在的位置,然后 ?: 前两个值。然后将整个东西放在括号中以确保整个东西在 return:

之前计算
return (
    (some_condition_goes_here)
    ? saved_tweets
    : curr
);

具体来说:

return (
    (!curr[0] || (curr[0] && curr[0].id !== saved_tweets[0].id))
    ? saved_tweets
    : curr
);

可能 可能 也可以在其中添加日志记录,但它比仅使用普通的 if 语句更难阅读,所以如果你想要 -或任何其他逻辑 - 只需坚持 if...else.

这个有效

 return (!curr[0] || (curr[0] && curr[0].id !== saved_tweets[0].id) ? saved_tweets : curr)