【问题标题】:A more efficiently/performant way to add elements and sort an array添加元素和对数组进行排序的更高效/高性能的方法
【发布时间】:2023-04-10 01:45:01
【问题描述】:

我下面的函数返回一个对象,其中包含通过“对象数组”参数传入的已排序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);

【问题讨论】:

    标签: javascript arrays sorting data-manipulation


    【解决方案1】:

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

    至于性能,我怀疑是否有比现有解决方案更快的解决方案。

    【讨论】:

    • 他们可以,但效率更高吗?问题不仅仅是要求一种不同的方法。基准测试显示了什么?
    • 感谢您的 lambda 表达式看起来像方法。经常看到map 方法,但从来没有看到实现,赞成:)
    • "您可以将传递给 sort() 方法的常规函数​​ (function(a, b) {return a - b;}) 更改为箭头函数" — 同样,他们可以,但为什么他们应该吗?使用箭头函数的主要原因是它会影响函数中未使用的this 的值。
    • @Quentin 我认为 OP 的“高效”意味着“更简单”,而不是“更快”。除非他们处理大量数据,否则速度并不重要。
    • @Quentin "使用箭头函数的主要原因是它会影响this的值" 不是真的,见When should I use Arrow functions in ECMAScript 6?
    【解决方案2】:

    你能把函数替换成

      function ascendingSort(players) {
          points.sort(function(a, b){return a["playerPoints"] - b["playerPoints"]});
          return {sortedPoints: players};
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多