为了账号安全,请及时绑定邮箱和手机立即绑定

如何使排序功能动态化

如何使排序功能动态化

繁星淼淼 2022-01-07 18:47:14
我有一个数组如下: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});因此,我希望我的排序函数是动态的,以便在更改数组中值的名称或创建具有新名称的信息表时不必更改代码。我希望我能清楚地回答我的问题,非常感谢任何帮助!
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

您可以将要排序的键存储在变量中,然后改用该变量。例子:


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]});


查看完整回答
反对 回复 2022-01-07
?
万千封印

TA贡献1891条经验 获得超3个赞

如果你是 lodash 的粉丝。


import _ from "lodash"

let key = 'z' // dynamic key

_.sortBy(arr1, key);



查看完整回答
反对 回复 2022-01-07
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

您需要找到一种方法来动态地告诉您的算法您需要排序的字段是什么。一个示例是在每个元素中包含一个属性,其中包含要排序的字段的名称。样本:


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);


查看完整回答
反对 回复 2022-01-07
  • 3 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信