簡體   English   中英

如何使用 Array.map() 查找數組中每個后續元素之間的差異

[英]How to use Array.map() to find the differences between each subsequent element in an array

我試圖返回數組[1,3,5,7,11,13]中每個后續數字之間的差異數組。

我有以下內容:

let arr = [1,3,5,7,11,13]
let differences = diff(arr)

function diff(arr){
    let diffs = arr.map((a, b) => a - b)
    return diffs
}

console.log(differences)
//Should be: [2,2,2,4,2]

它應該返回[2,2,2,4,2] ,但它返回的是[1,2,3,4,7,8]

如何正確使用Array.map()來返回[2,2,2,4,2]的預期結果?

(a, b) => a - b沒有任何意義,因為第一個參數是被迭代的數字,第二個是被迭代的索引(例如,0、1、2、3... )。

切掉第一個或最后一個元素,然后使用索引從原始數組中的一個相鄰項中減去被迭代的項:

 let arr = [1,3,5,7,11,13] let differences = diffs(arr) function diffs(arr){ return arr.slice(1).map((num, i) => num - arr[i]); } console.log(differences)

map function 需要三個參數

  • 元素
  • 指數
  • 大批

在這里深入了解-> map

因此,如果您需要一系列差異,您將需要這樣的東西:

array
.slice(1) // you slice to start calculating the differences from the second number
.map((element, index, newArray) => 
    element - array[index] // if index === 0, element shall be 3 now, and array[0] is 1
)

Array.map function的回調有3個參數,其中2個是可選的——元素、索引和數組。 在這種情況下,您將 map 數組指向元素和索引的差異,而不是元素和下一個元素。 如果你想返回一個差異數組,你可以使用這樣的東西:

 let arr = [1,3,5,7,11,13]; let differences = diffs(arr); function diffs(arr){ let diffs = arr.map((element, index, arr) => (arr[index+1] || 0) - element); diffs.pop(); return diffs; } console.log(differences);

如果您專門使用數組 map 僅用於解決問題。 此代碼將為您工作

let arr = [1,3,5,7,11,13]
let differences = diff(arr)

function diff(arr){
    let diffs = arr.map((elem, index, array) => {
      if(index > 0) return elem - array[index - 1];
    })
    return diffs.slice(1)
}

console.log(differences)

雖然我強烈建議您使用 for..in 或 forEach 或簡單循環以獲得更干凈的代碼。

嘗試這個

 let arr = [1,3,5,7,11,13] function diffs(arr){ let diffs = arr.slice(0,-1).map((v, i, a) => ((i===a.length-1)?arr[arr.length-1]:a[i+1])-v) return diffs } let differences = diffs(arr) console.log(`[${differences.join(',')}]`);

暫無
暫無

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

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