Javascript 连续数之和
给定一个整数数组 例如:Javascript 连续数之和,javascript,logic,Javascript,Logic,给定一个整数数组 例如: [1,2,2,2,5,7] 我想输出任意一组连续相同的数字及其总和 输出应为: [1,6,5,7] 有什么想法吗?您可以使用临时对象 var数组=[1,2,2,2,5,7], 结果=数组.reduce(函数(r,a){ 如果(r.last==a){ r、 数组[r.array.length-1]+=a; }否则{ r、 数组。推送(a); r、 last=a; } 返回r; },{array:[],last:null}); document.write(''+JS
[1,2,2,2,5,7]
我想输出任意一组连续相同的数字及其总和
输出应为:
[1,6,5,7]
有什么想法吗?您可以使用临时对象
var数组=[1,2,2,2,5,7],
结果=数组.reduce(函数(r,a){
如果(r.last==a){
r、 数组[r.array.length-1]+=a;
}否则{
r、 数组。推送(a);
r、 last=a;
}
返回r;
},{array:[],last:null});
document.write(''+JSON.stringify(结果,0,4)+'')代码>我们可以使用迭代来解决这个问题。代码应该是这样的
var number = numbers[i];
var nextUnique = numbers.find(function(num) {
return num != number
});
var numbersToFind = numbers.indexOf(nextUnique) - i;
上面,我们正在搜索重复组中的数字数量
else {
newNumbers.push(numbers[i]);
}
}
我们使用reduce
函数将相同的数字相加。然后,我们将删除原始编号,以防止在newNumbers数组中重复
alert(newNumbers);
否则,新数字将只是索引处的数字
_.chain([1,2,2,2,5,7]).groupBy(_.identity).map(_.sum).value()
浏览器兼容性
需要注意的是,array.prototype.find
功能是一项实验性技术,尚未在Internet Explorer或Opera上提供。如果您使用并想要一个功能变体,您还可以执行以下操作:
const sumConsecutives = (s) => {
let result = [], temp = 0;
for(let i = 0; i<s.length; i++) {
if(s[i] === s[i+1]){
temp += s[i];
} else if(s[i] !== s[i+1]){
result.push(temp + s[i]);
temp = 0;
}
}
return result;
};
我是这样解决的
const sumconsuutives=(s)=>{
让结果=[],温度=0;
for(让i=0;我在上面应用代码哦,同时你删除了你原来的问题!这只是一个简短的问题:numbers=numbers.filter(function(num){return num;})
为什么?这只过滤真实的值,但过滤的目的是什么?正如我所解释的,为了避免重复元素,在执行reduce操作后,我将删除该索引处的元素。这使元素显示为未定义的
。这就是为什么我们需要在每个itera开始时过滤真实元素t也许您应该声明,numbers.find
在所有用户代理上都不可用。。。
_.chain([1,2,2,2,5,7]).groupBy(_.identity).map(_.sum).value()
const sumConsecutives = (s) => {
let result = [], temp = 0;
for(let i = 0; i<s.length; i++) {
if(s[i] === s[i+1]){
temp += s[i];
} else if(s[i] !== s[i+1]){
result.push(temp + s[i]);
temp = 0;
}
}
return result;
};