![](/img/trans.png)
[英]Array.map : get the index of each element to use in the return function
[英]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.