![](/img/trans.png)
[英]How to compare two arrays containing dates to check if any values match?
[英]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.