Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays - Fatal编程技术网

Javascript 对一个数组中的所有相同元素求和

Javascript 对一个数组中的所有相同元素求和,javascript,arrays,Javascript,Arrays,如何对一个数组中的所有相同元素求和?例如,我有一个数组: [20,20,20,10,10,5,1] 我怎样才能做到[60,20,5,1] 以下是我迄今为止所尝试的: var money = [20, 20, 20, 10, 10, 5, 1]; for (var i = 0; i < money.length; i++) { if (money[i] == money[i + 1]) { money[i] += money[i + 1]; money.splice

如何对一个数组中的所有相同元素求和?例如,我有一个数组:

  [20,20,20,10,10,5,1]
我怎样才能做到
[60,20,5,1]

以下是我迄今为止所尝试的:

var money = [20, 20, 20, 10, 10, 5, 1];
for (var i = 0; i < money.length; i++) {
  if (money[i] == money[i + 1]) {
    money[i] += money[i + 1];
    money.splice(money.indexOf(money[i + 1]), 1);
  }
}
var money=[20,20,20,10,10,5,1];
for(var i=0;i
我会这样做:

  • 计算发生的次数
  • 将该值与引用相乘
  • 片段

    //我们的原始数组。
    var-arr=[20,20,20,10,10,5,1];
    //让我们创建一个存储计数的counts对象。
    变量计数={};
    //循环遍历数组以获取计数。
    对于(变量i=0;i控制台日志(fin)我会这样做:

  • 计算发生的次数
  • 将该值与引用相乘
  • 片段

    //我们的原始数组。
    var-arr=[20,20,20,10,10,5,1];
    //让我们创建一个存储计数的counts对象。
    变量计数={};
    //循环遍历数组以获取计数。
    对于(变量i=0;i使用带有变量的方法来存储以前的元素

    var-arr=[20,20,20,10,10,5,1];
    //用于存储上一个元素的变量
    var-prev;
    var res=arr.reduce(函数(arr,v){
    //若元素与上一个相同,则添加
    //带最后一个元素的值
    如果(上一个==v)
    arr[arr.length-1]+=v;
    //else推送并更新prev变量
    其他的
    arr.push(上一个=v)
    //返回数组referenece
    返回arr;
    //将结果的初始值设置为空数组
    }, [])
    控制台日志(res)使用带有变量的方法来存储以前的元素

    var-arr=[20,20,20,10,10,5,1];
    //用于存储上一个元素的变量
    var-prev;
    var res=arr.reduce(函数(arr,v){
    //若元素与上一个相同,则添加
    //带最后一个元素的值
    如果(上一个==v)
    arr[arr.length-1]+=v;
    //else推送并更新prev变量
    其他的
    arr.push(上一个=v)
    //返回数组referenece
    返回arr;
    //将结果的初始值设置为空数组
    }, [])
    
    控制台日志(res)您可以使用哈希表并存储结果槽的索引。这也适用于未排序的值

    var数据=[20,20,20,10,10,5,1],
    结果=[];
    data.forEach(函数(a){
    如果(!(本节中的a)){
    这[a]=结果。推(0)-1;
    }
    结果[this[a]]+=a;
    },Object.create(null));
    
    控制台日志(结果)您可以使用哈希表并存储结果槽的索引。这也适用于未排序的值

    var数据=[20,20,20,10,10,5,1],
    结果=[];
    data.forEach(函数(a){
    如果(!(本节中的a)){
    这[a]=结果。推(0)-1;
    }
    结果[this[a]]+=a;
    },Object.create(null));
    控制台日志(结果)
    var列表=[20,20,20,10,10,5,1];
    var结果=[];
    //已添加值的索引
    var-listofinex=[];
    对于(变量i=0;i=0){
    继续;
    }
    变量编号=列表[i];
    对于(var j=i+1;j
    var list=[20,20,20,10,10,5,1];
    var结果=[];
    //已添加值的索引
    var-listofinex=[];
    对于(变量i=0;i=0){
    继续;
    }
    变量编号=列表[i];
    
    对于(var j=i+1;j另一个单循环方案,使用
    Array.prototype.reduce
    和一个
    哈希表
    ,该哈希表存储创建的结果数组的索引-将处理未排序的输入

    请参见下面的演示:

    var数组=[20,20,20,10,10,5,1];
    var result=array.reduce(函数(散列){
    返回函数(p,c){
    if(散列中的c){
    p[hash[c]+=c;
    }否则{
    //在数组中存储索引
    hash[c]=p.push(c)-1;
    }
    返回p;
    };
    }(Object.create(null)),[]);
    
    console.log(result);
    另一个使用
    Array.prototype.reduce
    的单循环方案和一个
    哈希表
    ,该哈希表存储正在创建的结果数组的索引-将处理未排序的输入

    请参见下面的演示:

    var数组=[20,20,20,10,10,5,1];
    var result=array.reduce(函数(散列){
    返回函数(p,c){
    if(散列中的c){
    p[hash[c]+=c;
    }否则{
    //在数组中存储索引
    hash[c]=p.push(c)-1;
    }
    返回p;
    };
    }(Object.create(null)),[]);
    
    console.log(result);
    您尝试了什么?您保证重复项会在一起吗?for(var i=0;这是我的代码,但它只适用于两个元素?您尝试了什么?您保证重复项会在一起吗?for(var i=0;这是我的代码,但它只适用于两个人elemetns@Mahi为什么你看不到这些评论?你不明白哪个?谢谢你的回答,但我是一个相当年轻的开发人员..我不认为这个部分计数[num]=计数[num]?counts[num]+1:1;@H.Dervic sample.@H.Dervic这是If
    counts[num]
    是“truthy”值,设置为
    counts[num]=counts[num]+1
    。否则,将其设置为
    1
    @Mahi Right。任何值都可以解释为“真”布尔值或“假”布尔值。被解释为“真”值的是。默认情况下,
    counts[num]
    将是
    未定义的,这是一个“假”值值。这意味着您在
    counts[num]
    中输入的第一个值将是
    1
    。之后,这将在该值上添加一个值。
    1
    然后
    2
    然后
    3var list= [20,20,20,10,10,5,1];
    var result=[];
    //index of already added values
    var listOfIndex=[];
    for(var i=0;i<list.length;i++){ 
    if(listOfIndex.indexOf(i)>=0){
       continue;
    }
    var number=list[i];
    for(var j=i+1;j<list.length;j++){ 
    if(list[i]==list[j]){       
       number = number+list[j];
       listOfIndex.push(j);//push in this list the index of the value that has been added
      }
     }
     result.push(number);
    }
    console.log(result);