<script>
/*
需求:对下列数组按大小进行排序
思路:g
1、将原数组各个元素的信息(item和index)以数组对象的形式保存
2、先将各元素的逗号去除
3、对去除逗号后的数字按大小进行排序
4、再通过各元素在初始数组中的下标,对初始数组进行排序
*/
let arr = ['02,344,2', '1238', '1,5,4,9', '5844', '008,4,77', '2,3,4']
// 创建一个新数组,用于存放元素的数据和下标
let arrObj = []
// 1、将原数组各个元素的信息(item和index)以数组对象的形式保存
arr.forEach((item, index) => {
arrObj.push({ item, index })
})
// 声明一个方法,用于排序,详细参见js的sort方法
function compare(property) {
return function (a, b) {
var value1 = a[property]
var value2 = b[property]
return value1 - value2 //目前是从小到大排序,如果return value2 - value1 则是从大到小排序
}
}
// 2、将各元素的逗号去除,并且按从小到大进行排序
let newArrObj = arrObj
.map((v) => { //遍历数组对象
return {
item: v.item.replace(/,/g, '').replace(/\b(0+)/gi, ''), //正则去除逗号
index: v.index //同时保存元素在初始数组中对应的下标
}
})
.sort(compare('item')) //3、对去除逗号后的数字按大小进行排序
//4、再通过各元素在初始数组中的下标,对初始数组进行排序
arrObj.sort((a, b) => {
let order = newArrObj.map((v) => v.index)
return order.indexOf(a.index) - order.indexOf(b.index)
})
arr = arrObj.map((v) => v.item)
console.log('arr', arr) // ['2,3,4', '1238', '1,5,4,9', '5844', '008,4,77', '02,344,2']
</script>
对带逗号的数字字符串按大小进行排序
于 2023-02-20 16:32:27 首次发布