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;jvar 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这是Ifcounts[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);