簡體   English   中英

TS 2 arrays,如果第一個數組中的項目存在於第二個數組中,則 append 到第二個數組的開頭

[英]TS 2 arrays, if item from first array exists in second array then append to start of second array

我有 2 個對象列表。

一個是“所有”對象的列表,第二個是“特殊”對象的列表。

第一個列表包含所有對象,包括特殊對象。

如何對我的“所有”對象列表進行排序,以按以下方式對對象進行排序:首先是“特殊”對象,然后是對象的所有 rest?

每個 object 都有一個 id。

例如,

清單 1:

[
  {Id: 1, Name: "a", Surname: "a"},
  {Id: 2, Name:"b", Surname:"b"},
  {Id: 3, Name: "c", Surname: "c"}
]

清單 2:

[
  {Id: 2, Name:"b", Surname:"b"}
]

我如何訂購它,所以最終清單是:

[
  {Id: 2, Name:"b", Surname:"b"},
  {Id: 1, Name: "a", Surname: "a"},
  {Id: 3, Name: "c", Surname: "c"}
]

您可以使用find function 來檢查兩個比較元素之一是否特殊,並在自定義sort function 中相應地返回結果:

 let all = [{Id: 1, Name: "a", Surname: "a"}, {Id: 2, Name:"b", Surname:"b"}, {Id: 3, Name: "c", Surname: "c"}]; let special = [{Id: 2, Name:"b", Surname:"b"}]; function sortFunc(a, b) { var s1 = special.find(s=>s.Id==a.Id); var s2 = special.find(s=>s.Id==b.Id); if(s1 && s2) return 0; else if(s1) return -1; else if(s2) return 1; return 0; } let sorted = all.slice().sort(sortFunc); console.log(sorted);

如果你願意包含 lodash,你可以得到這個結果

 const List1 = [ {Id: 1, Name: "a", Surname: "a"}, {Id: 2, Name:"b", Surname:"b"}, {Id: 3, Name: "c", Surname: "c"} ] const List2 = [ {Id: 2, Name:"b", Surname:"b"} ] const SpecialIds = _.map(List2, (v) => { return v.Id }) const List3 = _.sortBy(_.map(List1, (v) => { return _.merge({}, v, {...v, Type: _.indexOf(SpecialIds, v.Id) === -1? '1_Normal': '0_Special' }) }), ['Type', 'Id']) console.log(List3)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

暫無
暫無

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

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