Slate Functions Editor两列表格按姓名升序排序实现咨询
问题根源
- 单独对
str_name_last_first字段调用排序方法时,仅对姓名字段的单列数据做了重排,关联的id_pk字段顺序完全没有同步调整,必然出现主键与姓名错位的问题。 - 参考的通用排序示例无法生效,核心原因是字段名不匹配:示例逻辑读取的是对象的
name属性,当前数据集的姓名字段为str_name_last_first,属性读取错误导致比较逻辑失效。
正确实现逻辑
排序操作必须针对存储完整行记录的数组执行,排序比对时从单条记录中读取对应姓名字段做判断,排序过程中整条记录(包含id_pk和对应姓名)会同步移动,从根本上避免字段错位。
场景1:data为行结构数组(每一项是包含id_pk、str_name_last_first的对象)
直接对整个data数组调用排序方法即可:
var data = {{q_data}} data.sort(function(a, b) { // 统一转小写消除大小写差异对排序结果的影响 const nameA = a.str_name_last_first.toLowerCase() const nameB = b.str_name_last_first.toLowerCase() if (nameA < nameB) return -1 // 升序排列时小值放前面 if (nameA > nameB) return 1 return 0 // 值相等时保持原有顺序 }) return data
场景2:data为列结构对象(id_pk、str_name_last_first各自存储为独立数组)
先将两列数据组装为完整的行记录数组,排序完成后再按需还原为原有列结构即可,避免单列排序导致的错位:
var data = {{q_data}} // 组装为完整行记录数组 const recordList = data.id_pk.map((id, idx) => ({ id_pk: id, str_name_last_first: data.str_name_last_first[idx] })) // 按姓名升序排序 recordList.sort(function(a, b) { const nameA = a.str_name_last_first.toLowerCase() const nameB = b.str_name_last_first.toLowerCase() if (nameA < nameB) return -1 if (nameA > nameB) return 1 return 0 }) // 还原为原列结构(不需要保持原数据结构可跳过这步) data.id_pk = recordList.map(item => item.id_pk) data.str_name_last_first = recordList.map(item => item.str_name_last_first) return data
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

