在JavaScript中,如何优雅地创建数组元素差异列表?
我有一个数字列表,比如说在JavaScript中,如何优雅地创建数组元素差异列表?,javascript,arrays,ecmascript-6,functional-programming,Javascript,Arrays,Ecmascript 6,Functional Programming,我有一个数字列表,比如说numbers=[3,7,9,10],我想要一个列表 包含相邻元素之间的差异-必须有一个 较少元素-在给定情况下diff=[4,2,1] 当然,我可以创建一个新的列表,遍历输入列表并编译我的 手动生成结果 我正在寻找一种优雅/实用(更不用说蟒蛇式)的方法来实现这一点。 在Python中,您可以编写[j-i for i,j In-zip(t[:-1],t[1:])]或使用numpy 为了这个 JavaScript中是否也有reduce()/列表理解方法?您可以使用reduc
numbers=[3,7,9,10]
,我想要一个列表
包含相邻元素之间的差异-必须有一个
较少元素-在给定情况下diff=[4,2,1]
当然,我可以创建一个新的列表,遍历输入列表并编译我的
手动生成结果
我正在寻找一种优雅/实用(更不用说蟒蛇式)的方法来实现这一点。
在Python中,您可以编写[j-i for i,j In-zip(t[:-1],t[1:])]
或使用numpy
为了这个
JavaScript中是否也有
reduce()
/列表理解方法?您可以使用reduce
方法来实现这一点
const number=[3,7,9,10]
const res=numbers.reduce((r,e,i,a)=>i?r.concat(e-a[i-1]):r,[]);
log(res)
您可以对差异进行切片和映射
var编号=[3,7,9,10],
结果=数字。切片(1)。映射((v,i)=>v-数字[i]);
控制台日志(结果)代码>您也可以在映射后弹出:
var编号=[3,7,9,10],
结果=数字.map((v,i)=>数字[i+1]-v);
result.pop()
控制台日志(结果)代码>您可以切片(0作为开始,-1跳过最后一项)和映射,以便在序列中生成元素及其后续元素之间的差异:
const items=[3,7,9,10];
console.log(items.slice(0,-1).map((e,i)=>items[i+1]-e))
您可以使用map
和slice
const number=[3,7,9,10,11,13];
const res=numbers.map((num,index)=>numbers[index+1]-num).slice(0,-1);
console.log(res)
您可以使用解构赋值和递归-
const diff=([a,b,…more])=>
b==未定义
? []
:[b-a,…diff([b,…more])]
log(diff([3,7,9,10]))
// [ 4, 2, 1 ]
console.log(diff([3]))
// []
console.log(差异([]))
//[]
您是否考虑过使用类似于lodash
的库?