簡體   English   中英

比較 arrays 中的值,如果任何值匹配,則增加第一個數組中的值

[英]compare values in arrays and if any values match, increment values in first array

我有這段代碼來檢查兩個 arrays 是否有任何匹配值,如果有任何值匹配我 ++ array1 中的所有內容

我想知道是否有更好的方法來做到這一點,因為我覺得這是很多循環,我最終會有 5 個 arrays 我需要相互比較

任何幫助將不勝感激!

const array1 = [2, 9];

const array2 = [2, 5, 9];

function checkMatch(a, b) {
  for (let i = 0; i < a.length; i++) {
    for (let e = 0; e < b.length; e++) {
      if (a[i] === b[e]) a[i]++;
    }
  }
  return a;
}

console.log(checkMatch(array1, array2))

如果您知道所有 arrays 都已排序,那么您可以使用以下方法 -

代碼 -

 const array1 = [2, 9]; const array2 = [2, 5, 9]; function checkMatch(a, b) { let i = 0, j = 0; while (i < a.length && j < b.length) { if (a[i] === b[j]) { a[i]++; j++; } else if (a[i] < b[j]) { i++; } else j++; } return a; } console.log(checkMatch(array1, array2))

解釋 -

上述方法的時間復雜度為O(N+M) ,而您的時間復雜度可能為O(N*M)

在上面的 function 中,您利用了 arrays 已排序的事實。 因此,當a[i] < b[j]時,您知道必須增加索引 i 才能獲得可能等於或大於b[j]的值。 a[i] > b[j]時,情況相同(但相反)。 因此,這種方法降低了代碼的整體時間復雜度,並提高了整體效率。

希望這可以幫助!

您可以使用includes方法檢查列表 (a) 的所有元素是否存在於您需要比較的所有其他 arrays 中。 然后您可以更新列表(a)中的值

 function checkMatch(a, b){ for (let i = 0; i < a.length; i++) { if(b.includes(a[i])){ a[i]++; } } return a; }; const array1 = [2, 9]; const array2 = [2, 5, 9]; console.log(checkMatch(array1, array2))

您可以在這里簡單地使用map

 var array1 = [2, 9]; var array2 = [2, 5, 9]; var result = array1.map(n=>(array2.includes(n)? n++: n, n)); console.log(result);

您可以使用Set和 map 的第一個數組,其中包含該值以及對該集合的該值的檢查。

 function checkMatch(a, b) { var values = new Set(b); return a.map(v => v + values.has(v)); } console.log(checkMatch([2, 9], [2, 5, 9]));

暫無
暫無

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

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