JavaScript:基于相等的值将数组拆分为组(数组的数组)
我试着做这个练习: 挑战在于实现一个将所有功能相加的功能 数组中的连续数字,并将其推入新数组。 示例:sumconsuites([1,1,2,1,1,1,1,1,2,1,1]);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
/->[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行,你是想计算以下重复数字的重复实例还是使用它们的总和