[英]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"}]
在這里, idValue2和idValue5排在首位。
你有解決方案嗎 ?
嘗試這樣。 只是一個filter
, some
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.