我有以下代码:

function compare (a, b) {
  let comparison = 0;
  if (a.essentialsPercentage < b.essentialsPercentage) {
    comparison = 1;
  } else if (a.essentialsPercentage > b.essentialsPercentage) {
    comparison = -1;
  } else {
    if (a.skillsNicePercentage < b.skillsNicePercentage) {
      comparison = 1;
    } else if (a.skillsNicePercentage > b.skillsNicePercentage) {
      comparison = -1;
    } else {
      if (a.startDate > b.startDate) {
        comparison = 1
      } else if (a.startDate < b.startDate) {
        comparison = -1
      }
    }
  }
  return comparison;
}

什么是最优雅的书写方式?目前看来还不太好。

最佳答案

假设将其用作Array.prototype.sort()的比较函数,则只考虑结果的符号,而不必特别是-11。因此,您可以简单地减去数字来代替ifelse

compare(a, b) {
    let comparison = b.essentialPercentage - a.essentialPercentage;
    if (comparison == 0) {
        comparison = b.skillsNicePercentage - a.skillsNicePercentage;
        if (comparison == 0) {
            comparison = a.startDate - b.startDate;
        }
    }
    return comparison;
}

如果任何属性是字符串而不是数字,则可以使用 localCompare 而不是减法。

08-18 13:35