簡體   English   中英

打字稿減去兩個布爾

[英]Typescript subtract two boolean

我有一個數組:

main = [{
           data: x,
           numberField:  1;
 }, {      data: y,
           numberField:  2;
 }, {      data: x,
           numberField:  3;
 },
  {        data:z
           numberField:  4;
 },
    {      data: q
           numberField:  5;
 }]
fixedElements = [ 3, 5]

我需要:

 fixedElements .includes(a.numberField) - fixedElements .includes(b.numberField) 

因為我需要檢查數組a中是否有兩個即將到來的值,而不是對它們進行排序,而是對其余值​​進行排序。 當我嘗試執行此打字稿時會引發錯誤

  left/right hand-side of the argument needs to be of type any or number.

我最初的排序函數為:

  sort(a,b) {
  if(a.numberField > b.numberField)
       return -1

  if(a.numberField < b.numberField)
     return 1;

    }

所以我想檢查即將到來的a或b是否在fixedElements數組中,並將它們留在最后。 還有其他方法嗎?

您可以使用+符號( 打字機游樂場演示 )將布爾值轉換為數字:

+fixedElements.includes(a.numberField) - +fixedElements.includes(b.numberField)`

這是排序邏輯( 打字稿playgroud-檢查控制台):

 const main = [{"data":"x","numberField":1},{"data":"y","numberField":2},{"data":"x","numberField":3},{"data":"z","numberField":4},{"data":"q","numberField":5}] // I'm using a Set instead of an array, because Set.has is faster than Array.includes const fixedElements = new Set([3, 5]) main.sort((a, b) => { const aF = fixedElements.has(a.numberField) const bF = fixedElements.has(b.numberField) if(!aF && !bF) return b.numberField - a.numberField return +aF - +bF }) console.log(main) 

您可以使用自定義排序功能,並檢查fixedElements數組中是否存在numberField值, fixedElements它們保持未排序狀態,否則根據numberField值對其進行排序。

 let main = [{ data: 'x', numberField: 1}, { data: 'y', numberField: 2}, { data: 'x', numberField: 3}, { data:'z', numberField: 4}, { data: 'q', numberField: 5}], fixedElements = [3, 5]; main.sort((a,b) => { if([a,b].some(({numberField}) => fixedElements.includes(numberField))) return +fixedElements.includes(a.numberField) - +fixedElements.includes(b.numberField); else return +b.numberField - +a.numberField }); console.log(main); 

您可以在sort方法中使用includes()方法進行檢查。

 var array = [{ data: 'x', numberField: 1 }, { data: 'y', numberField: 2 }, { data: 'x', numberField: 3 }, { data: 'z', numberField: 4 }, { data: 'q', numberField: 5 }], fixedElements = [3, 5]; array.sort((a, b) => { a = +a.numberField; b = +b.numberField; return (fixedElements.includes(a) - fixedElements.includes(b) || b - a); }); console.log(array) 

暫無
暫無

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

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