簡體   English   中英

比較兩個列表以排序第二個列表

[英]Compare two list to sort the second list

我想比較兩個列表,如果第一個列表的值對應於第二個列表的代碼,則有必要根據比較的值對第二個列表進行排序

第一名單:

      var List1 = [{id : "idValue2"}, {id : "idValue5"}]

第二個列表(排序之前)

     var List2 = [
                  {code : "idValue1", label: "value1"}, 
                  {code : "idValue2", label: "value2"},
                  {code : "idValue3", label: "value3"},
                  {code : "idValue4", label: "value4"};
                  {code : "idValue5", label: "value5"}]

比較list1 id和list2代碼后,將獲得對list2的排序

第二個列表(排序后)

     var List2 = [
                  {code : "idValue2", label: "value2"},
                  {code : "idValue5", label: "value5"}
                  {code : "idValue1", label: "value1"}, 
                  {code : "idValue3", label: "value3"},
                  {code : "idValue4", label: "value4"}]

在這里, idValue2idValue5排在首位。

你有解決方案嗎 ?

嘗試這樣。 只是一個filtersome filter會為您提供所需的陣列,最后將兩個陣列連接在一起

 var List1 = [{id : "idValue2"}, {id : "idValue5"}] var List2 = [ {code : "idValue1", label: "value1"}, {code : "idValue2", label: "value2"}, {code : "idValue3", label: "value3"}, {code : "idValue4", label: "value4"}, {code : "idValue5", label: "value5"} ] var a = List2.filter(x=> ( List1.some(y=> { return y.id == x.code }) )); var b = List2.filter(x=> ( !List1.some(y=> { return y.id == x.code }) )) var list3 = a.concat(b); console.log(list3); 

這是一個簡單但可能不是真正有效的解決方案。 基本上,您有兩個嵌套的for循環,它們循環遍歷List1和List2。 如果id和代碼相似,則將List2的元素壓入結果數組,並從List2的副本中刪除此元素。 為什么要復制? 因此,在迭代List2時,我們不會對其進行修改。 最后,結果(排序項)和copyList2(其余未排序項)通過concat連接在一起。

 var List1 = [{id : "idValue2"}, {id : "idValue5"}] var List2 = [ {code : "idValue1", label: "value1"}, {code : "idValue2", label: "value2"}, {code : "idValue3", label: "value3"}, {code : "idValue4", label: "value4"}, {code : "idValue5", label: "value5"} ] var result = []; var copyList2 = List2; for(var i = 0; i < List1.length; i++){ for(var j = 0; j < List2.length; j++){ if(List1[i].id === List2[j].code){ result.push(List2[j]); copyList2.splice(j, 1); } } } result = result.concat(copyList2); console.log(result); 

您可以將ID作為值存儲在臨時數組中。 然后在list2-array上使用自定義排序功能來比較代碼在temp-array中的位置:

 let list1 = [{id : "idValue2"}, {id : "idValue5"}]; let list2 = [ {code : "idValue1", label: "value1"}, {code : "idValue2", label: "value2"}, {code : "idValue3", label: "value3"}, {code : "idValue4", label: "value4"}, {code : "idValue5", label: "value5"} ]; let tempArray = []; for (let obj of list1) { tempArray.push(obj.id); } list2.sort(function(a, b) { let iA = tempArray.indexOf(a.code); let iB = tempArray.indexOf(b.code); if (iA == iB) { return 0; } if (iA == -1) { return 1; } if (iB == -1) { return -1; } if (iA < iB) { return -1; } if (iA > iB) { return 1; } }); console.log(list2); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM