我有這個未排序的陣列(包含物件)
toSortArray = [{taskID: 1, "title": "something1", subtasks: {}},
{taskID: 5, "title": "something5", subtasks: {}},
{taskID: 8, "title": "something8", subtasks: {}}];
我有這個陣列,它是根據 taskID 的正確定位動態填充的
sortingArray = [8, 1, 5];
我要做的是使用與“sortingArray”中所述的完全相同的順序對“toSortArray”進行排序。
我在這里找到了一個有點所謂的解決方案,說明了這一點:
var arr = ['one','four','two'];
var test = [{
key: 'one'
},{
key: 'two'
},{
key: 'four'
}];
function sortFunction(a,b){
var indexA = arr.indexOf(a['key']);
var indexB = arr.indexOf(b['key']);
if(indexA < indexB) {
return -1;
}else if(indexA > indexB) {
return 1;
}else{
return 0;
}
}
但是,它對我不起作用。我將占位符替換為:
function sortFunction (a,b) {
var indexA = sortingArray.indexOf(a["taskID"]);
console.log(indexA);
var indexB = sortingArray.indexOf(b["taskID"]);
console.log(indexB);
if (indexA < indexB) {
return -1;
} else if (indexA > indexB) {
return 1;
} else {
return 0;
}
}
當我除錯時(如您所見,我正在控制臺記錄 indexA 和 indexB)。它們總是回傳 -1,這意味著找不到這樣的索引。
我的問題是如何比較“taskID”值和 sortArray 元素。
謝謝 :)
uj5u.com熱心網友回復:
免責宣告:在示例中,我洗掉了與問題無關的屬性,并為簡潔起見重命名taskID為tID。
您可以使用Array.prototype.reduce來達到預期的結果:
let arr = [{tID: 1},{tID: 5},{tID: 8}];
let sArr = [8, 1, 5];
const result = sArr.reduce((a,v) => a.concat(arr.find(({tID})=>tID===v)), []);
console.log(result);
您還可以使用Array.prototype.sort:
let arr = [{tID: 1},{tID: 5},{tID: 8}];
let sArr = [8, 1, 5];
const result = arr.sort(
({tID: aID}, {tID: bID}) => sArr.indexOf(aID) - sArr.indexOf(bID));
console.log(result);
Array.prototype.map 也將完成這項作業:
let arr = [{tID: 1},{tID: 5},{tID: 8}];
let sArr = [8, 1, 5];
const result = sArr.map(i => arr.find(({tID}) => tID === i));
console.log(result);
map并且reduce可能會執行得更快,sort因為每次迭代只需要在 中進行一次查找 ( find) ,toSortArray而sort需要兩次查找 ( indexOf)。
uj5u.com熱心網友回復:
toSortArray您可以根據每個sortingArray元素值進行過濾。Usingfilter將回傳一個包含一個與當前值匹配的元素的陣列。由于 filter 回傳一個陣列,因此使用flatMap()迭代sortingArray并回傳一個按 . 順序排序的單個陣列sortingArray。
const toSortArray = [{taskID: 1, "title": "something1", subtasks: {}},
{taskID: 5, "title": "something5", subtasks: {}},
{taskID: 8, "title": "something8", subtasks: {}}];
const sortingArray = [8, 1, 5];
const result = sortingArray.flatMap(so=>toSortArray.filter(ts=>ts.taskID === so));
console.log(result);
uj5u.com熱心網友回復:
您可以使用地圖并查找為:
toSortArray = [{ taskID: 1, "title": "something1", subtasks: {} },
{ taskID: 5, "title": "something5", subtasks: {} },
{ taskID: 8, "title": "something8", subtasks: {} }];
sortingArray = [8, 1, 5];
const result = sortingArray.map((item) => toSortArray.find((element) => element.taskID === item));
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418584.html
標籤:
上一篇:如何用倒計時重繪特定的div
