Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 连续数之和_Javascript_Logic - Fatal编程技术网

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;
};