乐趣区

js中sort的使用(二)

js 中 sort 的使用 (一)
现在我们讨论第二种情况的排序。第一种情况是整个数组都是服务端给过来的,所以里面的 value 值也是服务端发的。那么,如果服务端只发 id 给你呢?这种情况就是,你现在有一个数组 arr1,服务端给你一个数组比如 arr2。
let arr1 = [
{id:1,name:”a”},
{id:2,name:”b”},
{id:3,name:”c”},
{id:4,name:”d”},
{id:5,name:”e”},
{id:6,name:”f”},
{id:7,name:”g”},
{id:8,name:”h”},
{id:9,name:”i”},
{id:10,name:”j”}
];
let arr2 = [
{id:1},
{id:2},
{id:3},
{id:5}
];
arr2 里面的数据就是已领取的项,所以我们排序后 arr1 的结果为:4,6,7,8,9,10,1,2,3,5。那么我们只要判断 arr1 里面的项的 id 有等于 arr2 里面的项的 id 的时候,就把 arr1 的那个项抛到数组的最后面就行了,所以:
let num = 0;
for(let key in arr2) {
for(let i = 0,l = arr1.length; i < l; i++) {
if(arr1[i].id == arr2[key].id){
let str = arr1.splice(i,1);
arr1.unshift(str[0]);
arr1.push(str[0]);
num ++;
}
}
}
arr1.splice(0,num)
哈哈,这种方法虽然也可以。但是不建议,就像第一章所说的,接下来我们来看看 sort 方法吧。首先我们为 arr2 写一个方法,用来判断所传数据是否存在于 arr2 中
function rank(val) {
for(let key in arr2){
if(val == arr2[key].id){
return 1;
}
}
return 0;
}
然后吧 arr1 中 id 的值传入 rank() 里面就行了
arr1.sort((a,b)=>{
if(rank(a.id) == 1 && rank(b.id) != 1){
return 1;
}else if(rank(a.id) != 1 && rank(b.id) == 1){
return -1;
}
return 0;
})
(完)

退出移动版