数组如下:
var pageIds = [125,123,124];
var arr = [
{pageId:123},
{pageId:124},
{pageId:125},
....
]
把数组arr按照指定的pageIds数组中的pageId值顺序排列
数组如下:
var pageIds = [125,123,124];
var arr = [
{pageId:123},
{pageId:124},
{pageId:125},
....
]
把数组arr按照指定的pageIds数组中的pageId值顺序排列
下面的方法是否跟题主期望一致?
arr.sort((a,b)=>{return pageIds.indexOf(a.pageId)-pageIds.indexOf(b.pageId)})
var result = [];
for(var i in pageIds){
for(var j in arr){
if(arr[j].pageId==pageIds[i]){
result.push(arr[j]);
arr.splice(j,1); //减少下次arr遍历长度
break;//中断遍历
}
}
}
function sort(pageIds, arr) {
var i = 0,
j = 0,
tmp;
for (i = 0; i < pageIds.length; i++) {
for (j = i; j < arr.length; j++) {
if (pageIds[i] == arr[j].pageId) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
return arr;
}
这样,两个循环就可以了。这个方法的前提是,你这个id肯定是唯一的~
var pageIds = [125,123,124];
var arr = [
{pageId:123},
{pageId:124},
{pageId:125}
]
let obj = {}
arr.map(x => {
obj[x.pageId] = x
return x
})
arr = pageIds.map(x => {
return obj[x]
})
console.log('result', arr)
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
sort方法只能做有一定规律的排序,~如果需要实现题主所说的按给定数字排序,我觉得这样会比较简单:
用filter方法逐个筛选出对应的数字,然后用concat方法连接起来,这两个方法都不会改变原数组,所以需要定义一个变量把结果存起来
代码如下: