Javascript 如何在给定和的数组中找到子数组的数目?

Javascript 如何在给定和的数组中找到子数组的数目?,javascript,arrays,Javascript,Arrays,我的计划如下: Input : {1,2,3,2,1,8,-3}, sum = 5 输出应该是3个示例组合({2,3},{3,2},{8,-3})有和 正好等于5 我试着用JavaScript来做,但是我很困惑 函数findSubarraySum(arr,sum){ var-res=0; var currentSum=0; 对于(变量i=0;i{ 常量组合=函数*(数组、计数、开始、结果){ 如果(计算){ 常量结果=[]; 用于(组合的常数[beg,end]([…范围(数组长度+1)],

我的计划如下:

Input : {1,2,3,2,1,8,-3},  sum = 5
输出应该是3个示例组合
({2,3},{3,2},{8,-3})
有和 正好等于5

我试着用JavaScript来做,但是我很困惑

函数findSubarraySum(arr,sum){
var-res=0;
var currentSum=0;
对于(变量i=0;ilog(findSubarraySum([1,2,3,4,10])您首先需要一种方法来迭代所有可以选择子阵列边界(切片定义)起点和终点的独特方法

在下面的代码中,我使用一个combines函数为提供的数组获取两个索引的所有可能组合。您可以执行其他操作,例如简单的双嵌套for循环

接下来,需要根据切片定义获取数组的切片,并将元素减少为一个和。Array.prototype.reduce函数可以很好地实现这一点

最后,仅当减少的和与所需的和匹配时,才希望在结果列表中包含子阵列

//输入:{1,2,3,2,1,8,-3},和=5
常量{组合,范围}=(()=>{
常量组合=函数*(数组、计数、开始、结果){
如果(计算){
常量结果=[];
用于(组合的常数[beg,end]([…范围(数组长度+1)],2)){
常量子数组=数组切片(beg,end);
if(谓词(子数组)){
结果:推送(子阵列);
}
}
返回结果;
};
const sum=array=>array.reduce((sum,e)=>sum+e);
console.log(
子阵(
a=>和(a)==5,
[1, 2, 3, 2, 1, 8, -3],
),

)
首先需要一种方法来迭代所有可以选择子数组边界(切片定义)的起始和结束的唯一方法

在下面的代码中,我使用一个combinations函数为提供的数组获取两个索引的所有可能组合

接下来,您需要根据切片定义获取数组的切片,并将元素减少为一个和

最后,仅当减少的和与所需的和匹配时,才希望在结果列表中包含子阵列

//输入:{1,2,3,2,1,8,-3},和=5
常量{组合,范围}=(()=>{
常量组合=函数*(数组、计数、开始、结果){
如果(计算){
常量结果=[];
用于(组合的常数[beg,end]([…范围(数组长度+1)],2)){
常量子数组=数组切片(beg,end);
if(谓词(子数组)){
结果:推送(子阵列);
}
}
返回结果;
};
const sum=array=>array.reduce((sum,e)=>sum+e);
console.log(
子阵(
a=>和(a)==5,
[1, 2, 3, 2, 1, 8, -3],
),

)
您需要至少学习一种算法来查找给定集合的子集。感谢您的评论。您的子数组是否需要连续,或者是否可以使用索引0、1和3?您将如何使用笔和纸进行操作?您到底混淆了什么?您需要至少学习一种算法来查找给定集合的子集。谢谢对于你的注释,你的子数组是否需要是连续的,或者你可以使用索引0、1和3?你会如何使用笔和纸?你到底对什么感到困惑?