亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何找到兩個值之間的差異?

如何找到兩個值之間的差異?

肥皂起泡泡 2021-12-23 15:53:35
我想返回兩個值之間的差異怎么做?0.0.0.1.0 和 0.0.0.1.12所以這兩個值之間的差是 12,所以我用 Math.abs() 嘗試過如何計算,但用個位數就可以了。
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

假設它們是字符串(因為在一個有效的 JS 數字中不能有超過 1 個句號),您可以按.字符拆分它并計算各個組件的差異:


function numStringDiff(a, b) {

  // split them on dot characters

  const aParts = a.split('.');

  const bParts = b.split('.');


  // loop using longest array length as a container for mapped results

  return Array(Math.max(aParts.length, bParts.length)).fill(undefined).map((_, i) => {

    const i1 = parseInt(aParts[i] || 0); // fetch aParts[i] or default to 0

    const i2 = parseInt(bParts[i] || 0); // fetch bParts[i] or default to 0


    // return compared value after defaulting the values.

    return i2 - i1;

  });

}


console.log(numStringDiff('0.0.0.1.0', '0.0.0.1.12'));


這里的問題是,正如您在評論中所述,它們的長度可能不同。為了讓它在這種情況下工作,我們必須迭代等于最長數組長度的次數,并確保較短數組中的任何缺失項都默認為某個不間斷的值,例如0這樣我們可以安全地減去每個數字出現在最長的列表中,帶有某物或0。


請注意,這0是我僅用于確保您可以計算不同長度數組之間的差異的值,選擇適合您需要的任何(數字或浮點)值。


如果在這種情況下第二個參數的點數比第一個少,則返回負差,否則如果第一個比最后一個長,將返回正差。


一些例子:


numStringDiff('1.1.1',   '1.1') // => [0, 0, -1]

numStringDiff('1.1',   '1.1.1') // => [0, 0,  1]

numStringDiff('1.1.1', '1.1.1') // => [0, 0,  0]

對于兩個值之間的絕對距離,可以簡單地.map通過這個數組:


numStringDiff('1.1.1', '1.1').map(num => Math.abs(num));

// OR, using short form: 

numStringDiff('1.1.1', '1.1').map(Math.abs);

最后,如果您需要將結果作為字符串,只需將.join其與'.':


numStringDiff('1.1.1', '1.1').map(Math.abs).join('.');

知道你想要實現什么。如果您嘗試手動平分版本號(如semver 版本),我建議您不要這樣做,因為此功能總會發現一些場景,例如預發布版本,不僅包含數字,還包含0.0.0-pre-foo-version其他內容。因為我不知道你到底想做什么,所以我會把這個責任留給你去弄清楚:)


查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號