我怎样才能缩短这个三元运算符?

How can I shorten this ternary operator?

我有存储从数据库中检索到的信息的代码。

因为我的 JavaScript 代码是异步的并且需要时间来检索数据,我认为它会存储错误而不是数据。

有一个现有的辅助函数可以检查高级的嵌套对象。我想缩短此函数并阻止三元运算符返回 ''.

const ratingAggregateCount = IsNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "count") ? currentProjectDetails.ratingAggregate.count : '';

const ratingAggregateAverage = sNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "average") ? currentProjectDetails.ratingAggregate.average.toFixed(1) : '';

const ratingWiseCounts = (!!currentProjectDetails.ratingWiseCounts ) ? currentProjectDetails.ratingWiseCounts : '';

如果 IsNestedObjectKeyPresent 助手主要用于此目的,则可以使用 returns 空字符串的助手代替:

const ratingAggregateCount = nestedObjectKeyOrEmptyString(currentProjectDetails, "ratingAggregate", "count");

这就是像 Lodash get 这样的安全导航函数中的默认值参数。

没有必要使用与条件相同的值的三元组,它可以被短路:

const ratingWiseCounts = currentProjectDetails.ratingWiseCounts || '';

如果已知值唯一可能为假的情况是 undefined,可以使用解构默认值:

const { ratingWiseCounts = '' } = currentProjectDetails;

你可以使用短路运算符&&

const ratingAggregateCount = IsNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "count") && currentProjectDetails.ratingAggregate.count;

const ratingAggregateAverage = sNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "average") && currentProjectDetails.ratingAggregate.average.toFixed(1);

const ratingWiseCounts = (!!currentProjectDetails.ratingWiseCounts ) && currentProjectDetails.ratingWiseCounts;

示例

const a = true && "assign";
const b = "something" && "assign";
const c = false && "not assign";
const d = undefined && "not assign";
const e = null && "not assign";
const f = "" && "not assign";

console.log({a,b,c,d,e,f});