如何使排序功能动态化

我有一个数组如下:

var arr1 = [{x: 0, y: 0}, {x: 10, y: 10}, {x: 20, y: 20}, {x: 30, y: 30}, {x: 40, y: 40}]

arr1 表示用户创建的信息表中的数据,我使用 x 的升序对 arr1 进行了排序.sort

arr1.sort(function(a, b){return a.x - b.x});

当用户将信息表 (arr1) 中值的名称从 x 更改为 z 或创建具有不同名称的新信息表时,我必须修改我的代码以再次对其进行排序。

var arr1 = [{z: 0, y: 0}, {z: 10, y: 10}, {z: 20, y: 20}, {z: 30, y: 30}, {z: 40, y: 40}]
arr1.sort(function(a, b){return a.z - b.z});

因此,我希望我的排序函数是动态的,以便在更改数组中值的名称或创建具有新名称的信息表时不必更改代码。我希望我能清楚地回答我的问题,非常感谢任何帮助!


繁星淼淼
浏览 168回答 3
3回答

PIPIONE

您可以将要排序的键存储在变量中,然后改用该变量。例子:var arr1 = [{z: 0, y: 0}, {z: 10, y: 10}, {z: 20, y: 20}, {z: 30, y: 30}, {z: 40, y: 40}]let keyToSortBy = 'z'arr1.sort(function(a, b){return a[keyToSortBy] - b[keyToSortBy]});

万千封印

如果你是 lodash 的粉丝。import _ from "lodash"let key = 'z' // dynamic key_.sortBy(arr1, key);

扬帆大鱼

您需要找到一种方法来动态地告诉您的算法您需要排序的字段是什么。一个示例是在每个元素中包含一个属性,其中包含要排序的字段的名称。样本:var arr1 = [{x: 0, y: 0, sort: 'x'}, {x: 10, y: 10, sort: 'x'}]var arr1 = [{z: 0, y: 0, sort: 'z'}, {z: 10, y: 10, sort: 'z'}]然后,您的排序功能将是相同的:var sortFunction = function(a, b){return a[a['sort']] - b[b['sort']]}arr1.sort(sortFunction);arr2.sort(sortFunction);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript