比如:现在有两个数组;
期望:数组二要根据数组一的前后顺序进行排序;
数组一:
let showArr = [2, 4, 1, 3]
// 数组二:
let options = [{
id: 1,
name: '北京'
}, {
id: 2,
name: '上海'
}, {
id: 3,
name: '深圳'
}, {
id: 4,
name: '杭州'
}];
思路:两个数组,排序有点困难,如果变成一个数组排序,就方便了;
我们给每个option数组对象新增一个排序属性sordId,这个sordId的值就是 option的id 在 showArr中的 索引 位置
let showArr = [2, 4, 1, 3]
options.forEach(item=>{
let sortId = showArr.indexOf(item.id)
item.sortId = sortId
})
最后实现:现在我们的options数组已经可以排序了
再写一个对象数组按照属性名排序的方法:
//按照prop属性升序排序
function sort(prop) {
return function (obj1, obj2) {
var val1 = obj1[prop]
var val2 = obj2[prop]
if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
val1 = Number(val1)
val2 = Number(val2)
}
if (val1 < val2) {
return -1
} else if (val1 > val2) {
return 1
} else {
return 0
}
}
}
// 数组一
let showArr = [2, 4, 1, 3]
// 数组二
let options = [{
id: 1,
name: '北京'
}, {
id: 2,
name: '上海'
}, {
id: 3,
name: '深圳'
}, {
id: 4,
name: '杭州'
}];
options.forEach(item=>{
let sortId = showArr.indexOf(item.id)
item.sortId = sortId
})
let sortArr = options.sort(sort('sortId'))
console.log(sortArr)
最后输出: