需要javascript最佳排序最佳实践,以升序,降序

时间:2018-11-28 08:19:48

标签: javascript sorting

我的示例有一个摘要,我需要使用asc,desc转换对算法进行排序的最佳实践。此代码段根据工作具有许多复杂性,因为数组中始终需要字符串号。我如何简化此代码段。

const data = [['aaa','22'], ['aba','23'],['baa','12'],['caa','122']]

console.log(data)
console.log('\n')

var columnIndex = 0;
var order = 'DESC';

data.sort((a, b) => {
  if (!Number.isInteger(Number.parseInt(a[columnIndex]))) {
      if (a[columnIndex] < b[columnIndex]) {
          return order === "ASC" ? -1 : 1;
      }
      if (a[columnIndex] > b[columnIndex]) {
          return order === "ASC" ? 1 : -1;
      }
      return 0;
  }
  else {
      return order === "ASC" ? (Number(a[columnIndex].match(/(\d+)/g)) - Number((b[columnIndex].match(/(\d+)/g)))) : ( Number((b[columnIndex].match(/(\d+)/g))) - Number(a[columnIndex].match(/(\d+)/g)));
  }
});
console.log(data);

1 个答案:

答案 0 :(得分:0)

您可以将部分应用程序与下面的sortBy()之类的咖喱函数一起使用来确定排序顺序和条件,而不必依赖全局变量。我什至在事件侦听器中提供了用法,该侦听器会在输入发生更改时自动更新输出:

const data = [['aaa', 22], ['aba', 23], ['baa', 12], ['caa', 122]];
const sortBy = (o, i) => (a, b) => (-(a[i] < b[i]) || +(a[i] > b[i])) * o;

function update () {
  const [order, index] = Array.from(
    document.querySelectorAll('select'),
    input => Number(input.value)
  );
  const sort = sortBy(order, index);

  document.querySelector('#json').textContent = JSON.stringify(data.sort(sort));
}

document.body.addEventListener('input', update);

update();
<select name="order" value="1">
  <option value="1">Ascending</option>
  <option value="-1">Descending</option>
</select>

<select name="index" value="0">
  <option value="0">String</option>
  <option value="1">Number</option>
</select>

<pre id="json"></pre>

这是my answerSort array of objects by string property value的修改,其中包含有关sortBy()工作方式的更多解释。