一种更有效/更高效的方式来添加元素和对数组进行排序

时间:2016-09-01 09:51:49

标签: javascript arrays sorting data-manipulation

下面的函数返回一个对象,该对象包含通过“数组对象”参数传入的已排序playerPoints。如果不修改传入的数组,是否有更高效/更高效的方式来添加元素并按升序对数组进行排序?

注意:对象数组可以包含一个或多个对象。在效率方面,我指的是完成时间(速度)。函数ascendingSort也是必需的,无法替换。

var data = [{playerPoints: 10}, {playerPoints: 8}, {playerPoints: 2}, {playerPoints: 21},{playerPoints: 30}];

function ascendingSort(players) {
	var points = [];
	for(var i = 0; i < players.length; i++) {
		points.push(players[i].playerPoints);
	}
	points.sort(function(a, b) {return a - b;});
	return {sortedPoints: points};
}

var obj = ascendingSort(data);
console.log(obj);

2 个答案:

答案 0 :(得分:6)

要简化此功能,您可以使用the map() method将对象映射到playerPoints属性。此外,您可以将传递给sort()方法(function(a, b) {return a - b;})的常规函数​​更改为arrow function(a, b) => a - b)。

const data = [{playerPoints: 10}, {playerPoints: 8}, {playerPoints: 2}, {playerPoints: 21},{playerPoints: 30}]

function ascendingSort(players) {
  return {
    sortedPoints: data.map(x => x.playerPoints).sort((a, b) => a - b)
  }
}

const obj = ascendingSort(data)
console.log(obj)

至于性能,我怀疑有一个比你已经拥有的解决方案更快的解决方案。

答案 1 :(得分:0)

你能用

替换这个功能吗?
  function ascendingSort(players) {
      points.sort(function(a, b){return a["playerPoints"] - b["playerPoints"]});
      return {sortedPoints: players};
}