Javascript 显示唯一的数组项和单独数组中相关项的总和
我尝试使用两个相关的数组,一个用于检索唯一值,另一个需要求唯一值的和。数组1的索引与数组2的索引匹配,我需要将所有值相加以获得总和。例如: 阵列1:Javascript 显示唯一的数组项和单独数组中相关项的总和,javascript,arrays,Javascript,Arrays,我尝试使用两个相关的数组,一个用于检索唯一值,另一个需要求唯一值的和。数组1的索引与数组2的索引匹配,我需要将所有值相加以获得总和。例如: 阵列1: var arr1 = [7012, 7013, 7015, 7012]; 阵列2: var arr2 = [10, 20, 25, 10]; 预期产出: (第一个解释不是很好,改变了这个) 注意:我使用Firebase将值检索到数组中,这些值不会被设置为索引 我使用Set()检索唯一值: var newArr = [...new Set(arr
var arr1 = [7012, 7013, 7015, 7012];
阵列2:
var arr2 = [10, 20, 25, 10];
预期产出:
(第一个解释不是很好,改变了这个)
注意:我使用Firebase将值检索到数组中,这些值不会被设置为索引
我使用Set()检索唯一值:
var newArr = [...new Set(arr1)];
这很好用
我遇到的麻烦是从数组2获取相关值并求和。我可以通过使用.reduce()创建一个精细的和,但是我很难根据数组1中的值的相关关系来确定如何将数组2的值放入一个新数组。您可以使用与数组1
相同的键来使用和存储相应的值。然后得到求和的值
var array1=[7012,7013,7015,7012],
array2=[10,20,25,10],
map=array1.reduce((m,k,i)=>(m.set(k,(m.get(k)| | 0)+array2[i]),新map),
sum=[…map.values()].reduce((r,v)=>r+v,0);
log([…map]);
控制台日志(总和)代码>
.as console wrapper{max height:100%!important;top:0;}
据我所知,您希望根据arr1处的相等值对arr2进行分组和汇总。因此,您可以创建一个哈希表:
var arr1 = [7012, 7013, 7015, 7012];
var arr2 = [10, 20, 25, 10];
var obj={};
arr1.forEach(function(el,i){//el is a value of arr1 at index i, e.g. 7012,0
obj[el]=obj[el]||0;//initialise obj[7012]
obj[el]+=arr2[i]||0;//increase obj[7012] by arr2[0] so 10
});
console.log(obj);
将创建:
{
7012:20,
7013:20,
7015:25
}
您可以使用将唯一数组的值替换为arr2对应位置的值,然后使用获得总和:
const sum = [...new Set(arr1)].
map( x => arr2[ arr1.indexOf( x ) ] ).
reduce( ( a, b ) => a + b, 0 )
;
如果我理解正确,您需要一个数组,该数组将包含array2中用于array1唯一值的各个和。使用映射
我们可以得到唯一的值以及相应的和。然后可以使用Map#values
获取数组2的和,Map#keys
获取数组1的唯一值,Map#entries
获取唯一值和和和的元组
const arr1=[7012、7013、7015、7012];
常数arr2=[10,20,25,10];
const map=arr1.reduce((map,v,i)=>{
const sum=map.get(v)| 0;
返回映射集(v,sum+arr2[i]);
},新地图());
常量arr1Unique=[…map.keys()];
常量arr2Sums=[…map.values()];
常量元组=[…map.entries()];
控制台日志(arr1Unique);
控制台日志(arr2Sums);
log(元组)代码>数组1中相同值的值是否相等?为什么不为数组2使用Set?然后加上唯一的值?哪些和?arr[0]+arr2[0]还是什么?如果数组的长度不同,会发生什么情况?为什么需要这个(可能是XY问题)您的示例没有显示预期的输出。目前还不清楚要在总和中包含哪些值。对不起,忘记包含预期输出。看起来是这样的:7012:20 7013:20 7015:25基本上,我需要将array2值的总和与array1的唯一值的相同索引相加,但在我使这些值唯一之前。@TaylorNellis请编辑您的问题,7012:20是一个对象属性,如果我只需要得到数组2唯一值的总和,它就可以正常工作。我需要数组2的值保持不唯一,以便我可以得到数组1中每个唯一值的正确总数。是的,谢谢。我的解释不是很好,但你明白了。我不知道你能用这种方式使用地图。
const sum = [...new Set(arr1)].
map( x => arr2[ arr1.indexOf( x ) ] ).
reduce( ( a, b ) => a + b, 0 )
;