簡體   English   中英

為什么這個函數會改變數組項的順序?

[英]Why does this function change the order of the array items?

該函數應返回等於總和 (s) 的最早的完整對;

 function sumPairs(ints, s, arr = ints.slice(), result) { let lastIndex = arr.length; for (let int of arr) { for (let i = 1; i < arr.length; i++) { if (int + arr[i] === s && i < lastIndex) { result = [int, arr[i]]; lastIndex = i; } } arr.splice(0, 1); } return result; } console.log(sumPairs([10, 5, 2, 3, 7, 5], 10)); // [3,7] is expected // console.log(sumPairs([1, 2, 3, 4, 1, 0], 2)); // console.log(sumPairs([0, 0, -2, 3], 2)); // console.log(sumPairs([1, 4, 8, 7, 3, 15], 8)); console.log(sumPairs([1, -2, 3, 0, -6, 1], -6)); // [0,-6] is expected // console.log(sumPairs([4, 3, 2, 3, 4], 6));
對於奇怪返回的示例,我在函數調用/控制台日志旁邊列出了預期結果。

通過在循環內部進行拼接,您可以在遍歷數組時從數組的開頭刪除一個元素。 這會導致int變量被迭代為僅每隔一個值,例如:

sumPairs([10, 5, 2, 3, 7, 5], 10)
          ^^     ^     ^

 function sumPairs(ints, s, arr = ints.slice(), result) { let lastIndex = arr.length; for (let int of arr) { console.log(int); for (let i = 1; i < arr.length; i++) { if (int + arr[i] === s && i < lastIndex) { result = [int, arr[i]]; lastIndex = i; } } arr.splice(0, 1); } return result; } sumPairs([10, 5, 2, 3, 7, 5], 10)

所以返回數組中的第一項永遠不是奇數索引。

為什么要拼接? 它根本沒有為您做任何事情,並且對算法沒有意義。

要返回存在的第一對,請構造一組需要找到的數字以求和所需的數量。 例如,當以 10 為目標迭代 3 時,將 7 添加到 Set。

 function sumPairs(ints, target) { const set = new Set(); for (const num of ints) { if (set.has(num)) return [target - num, num]; set.add(target - num); } } console.log(sumPairs([10, 5, 2, 3, 7, 5], 10)); // [3,7] is expected console.log(sumPairs([1, 2, 3, 4, 1, 0], 2)); console.log(sumPairs([0, 0, -2, 3], 2)); console.log(sumPairs([1, 4, 8, 7, 3, 15], 8)); console.log(sumPairs([1, -2, 3, 0, -6, 1], -6)); // [0,-6] is expected console.log(sumPairs([4, 3, 2, 3, 4], 6));

暫無
暫無

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

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