JavaScript:基于相等的值将数组拆分为组(数组的数组)

JavaScript:基于相等的值将数组拆分为组(数组的数组),javascript,arrays,Javascript,Arrays,我试着做这个练习: 挑战在于实现一个将所有功能相加的功能 数组中的连续数字,并将其推入新数组。 示例:sumconsuites([1,1,2,1,1,1,1,1,2,1,1]); /->[2,2,4,2,3] 我的想法是将数组拆分为一组数组。因此,对于上面的示例:[[1,1],[2],[1,1,1],[2],[1,1,1]]然后通过减少它们 我尝试了while循环,并将推入一个临时变量,如果下一个数字不相同,该变量将被推入,但没有效果 关于如何实现这一点有什么想法吗?函数sumconsuctio

我试着做这个练习:

挑战在于实现一个将所有功能相加的功能 数组中的连续数字,并将其推入新数组。 示例:sumconsuites([1,1,2,1,1,1,1,1,2,1,1]);
/->[2,2,4,2,3]

我的想法是将数组拆分为一组数组。因此,对于上面的示例:
[[1,1],[2],[1,1,1],[2],[1,1,1]]
然后通过
减少它们

我尝试了
while
循环,并
推入一个临时变量,如果下一个数字不相同,该变量将被推入,但没有效果

关于如何实现这一点有什么想法吗?

函数sumconsuctionives(输入){
var输出=[],
系数=1,
lastnr=null;
对于(变量i=0;i
我喜欢challange,所以我用了一个你认为有用的两步函数

  • 第一个reduce创建数组的数组

  • 第二个例子总结了它们

这不是最短的代码,但我希望最容易理解

const arr=[1,1,2,1,1,1,1,2,1,1];
设currentNumber=未定义;
设currentTempArr=[];
让newArr=arr.reduce((tempArr,value)=>{
//检查是否设置了当前编号
如果(currentNumber==未定义)currentNumber=值;
//如果是当前编号,则推送到临时阵列
如果(currentNumber==值)
当前温度推送(值);
//否则,只需创建一个新数组并将旧数组推入父数组
否则{
tempArr.push(当前tempArr);
currentTempArr=[];
currentNumber=值;
当前温度推送(值);
}
//将数组返回到下一个reduce迭代
返回节拍;
}, []);
//推送最后一个临时数组,因为函数在推送之前停止
新发推送(currentTempArr);
//这将构建您的阵列阵列
console.info(“数组的数组”);
console.log(newArr);//[ [1,1,1], [2], ... ]
//现在汇总子数组
让sumArr=newArr.reduce((tempArr,value)=>{
设和=0;
//对于数组中的每个值,我们将其添加到总和中
forEach(val=>sum+=val);
//将总数添加到临时数组中
临时推力(总和);
//将填充的数组返回到reduce函数
返回节拍;
}, []);
//包含求和值的数组
console.info(‘看到神奇的发生’);

控制台日志(sumArr)您可以使用一步
reduce
方法:

const sumconsutives=ar=>
ar.reduce((ac,x,i)=>{
如果(i!==0&&ar[i-1]==x)
ac[ac.长度-1]+=x;
其他的
交流推力(x);
返回ac;
}, [])
var r=连续的总和([1,1,2,1,1,1,1,1,2,1,1]);//->[2,2,4,2,3]

log(r)
我能想到的最简单的方法。。。(但不带map/reduce)

var sumconsutives=函数(arr){
var newArr=[];
var prev=arr[0];
var总和=arr[0];

对于(var i=1;i您可以使用
array.reduce

逻辑
  • 创建一个临时数组
  • 循环数组并检查上一个值和当前值是否相同
  • 如果相同,则获取临时数组的最后一个元素并将当前值添加到该元素中
  • 如果不是,则将当前元素推送到临时数组
样品
函数连续性(arr){
var r=[];
arr.reduce(函数(p,c,i,a){
如果(p==c){
r[r.length-1]+=c
}否则{
r、 推动(c)
}
返回c;
}, 0);
返回r;
}
变量a=[1,1,2,1,1,1,1,1,2,1,1,1,1];

console.log(sumconsutives(a));
这是我能想到的最简单的方法:

var testarr=[1,1,2,1,1,1,1,2,1,1];
var resultar=[testarr[0]];

对于(var i=1;i您也可以尝试以下方法:

var source = [1,1,2,1,1,1,1,2,1,1,1];

source.reduce(function(p, c, index, arr) {                 
   if (p.length === 0 || arr[index - 1] !== c) {
       return p.concat(c);
   }
   else if (arr[index - 1] === c) {           
        p[p.length - 1] += c             
   }

   return p;
}, []);

你想让我们做你的家庭作业吗?请分享你的代码。我们将帮助你修复错误,但我们不是你的代码工厂。到目前为止你取得了什么成就?请粘贴你的代码片段(如果你有),以帮助你改进它。请将代码带到studio@Randy没有。我问的是关于“如何实现这一点”的想法。我有没有让你为我写出来me?无论哪种方式,代码传入
var reducer=a=>a.reduce((p,c,i,a)=>(i==0?p[0]=c:c==a[i-1]?p[p.length-1]+=c:p[p.length]=c,p),[])
@Kreitzo我真的不明白,如果你想改变当前的行为,请看第4行,你是想计算以下重复数字的重复实例还是使用它们的总和