Рефакторинг простого оператора возврата в js функции сортировки - PullRequest
0 голосов
/ 17 января 2020
sortComponents (a, b) {
  if (!a) {
    return 1
  }
  if (!b) {
    return -1
  }
  return this.keyedComponentTypes[a].text > this.keyedComponentTypes[b].text ? -1 : 1
},

Есть ли способ суммировать / упростить первые два оператора возврата до одного? Я не хочу использовать троичные операторы, чтобы изменить его на одно утверждение и сделать код сложным.

Ответы [ 4 ]

1 голос
/ 17 января 2020

Вы можете использовать оператор || для возврата -1, когда ваше условие и !b истинно.

Мы также знаем, что если a не определено (!a), оно вернется 1 поэтому мы должны убедиться, что для возврата a определено, в противном случае мы вернем 1.

let keyedComponentTypes = [
  {
    text: 'b'
  },
  {
    text: 'a'
  },
  {
    text: 'e'
  },
  {
    text: 'd'
  },
  {
    text: 'c'
  },
]


function originalSortComponents (a, b) {
  if (!a) {
    return 1
  }
  if (!b) {
    return -1
  }
  return keyedComponentTypes[a].text > keyedComponentTypes[b].text ? -1 : 1
}

function improvedSortComponent(a,b) {
  return a && ((keyedComponentTypes[a].text > keyedComponentTypes[b].text) || !b) ? -1 : 1
}

let array = [0,undefined,1,2,3,undefined,4]
console.log(array.sort(originalSortComponents));

console.log(array.sort(improvedSortComponent));

Вы можете видеть, что он возвращает одно и то же в обоих случаях.

0 голосов
/ 20 января 2020

Это то, что я закончил

sortComponents (a, b) {
  if (!a || !b) {
    return !a ? -1 : 1
  }
  return this.keyedComponentTypes[a].text > this.keyedComponentTypes[b].text ? 1 : -1
}
0 голосов
/ 17 января 2020

Вы можете сделать что-то вроде следующего, если вы хотите сохранить как можно меньше операторов возврата (хотя я не вижу большого значения в том, чтобы в начале были операторы короткой цепи возврата, если вместо этого вы потеряете читабельность)

const first = !!this.keyedComponentTypes[a] ? this.keyedComponentTypes[a].text : '';

const second = !!this.keyedComponentTypes[b] ? this.keyedComponentTypes[b].text : '';

return (second || '').localeCompare(first || '');
0 голосов
/ 17 января 2020

Да, вот как бы я это сделал

sortComponents (a, b) 
{
  const c = this.keyedComponentTypes[a].text > this.keyedComponentTypes[b].text;
  return (!a || !c) ? 1 : -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...