我正在尝试从现有数组创建一个新数组。条件是如果元素是重复的,那么对这些元素求和。有关详细信息,请参阅下面的示例,因为我无法清楚地解释:
输入:
object[] arr = new object[4];
arr[0] = 1;
arr[1] = "abc";
arr[2] = 'c';
arr[3] = 12.25
输出:
var arrayA = ["2", "1", "4", "2", "5", "1", "3", "2"];
这里arrayB [0] = 2s之和(2 + 2 + 2),arrayB [1] = 1s之和(1 + 1)
我尝试了很多但却无法弄清楚如何实现这一目标。
请帮忙!
答案 0 :(得分:1)
var arrayA = ["2", "1", "4", "2", "5", "1", "3", "2"];
var arrayB = [];
for (var i = 0; i < arrayA.length; i++) {
if (arrayA.indexOf(arrayA[i]) === i) {
var count = 1;
for (var j = i + 1; j < arrayA.length; j++) {
if (arrayA[j] === arrayA[i]) {
count++;
}
}
arrayB.push(arrayA[i] * count);
}
}
console.log(arrayB);
// [ 6, 2, 4, 5, 3 ]
答案 1 :(得分:1)
你可以这样做
arrayA = ["2", "1", "4", "2", "5", "1", "3", "2"];
//make a set
var set = new Set(arrayA);
var arrayB = [];
set.forEach(function(a) {
//for each set find in the original arrayA
var len = arrayA.filter(function(f) {
return f == a;
});
//push in arrayB set element * number of it occurance in original array
arrayB.push((+a) * (len.length));
})
console.log(arrayB)
&#13;
答案 2 :(得分:1)
你可以通过第一次循环来总结它们,第二次重新创建数组:
var arrayA = ["2", "1", "4", "2", "5", "1", "3", "2"];
var arrayB = sumDuplicates(arrayA);
console.log(arrayB);
function sumDuplicates(arr) {
var obj = {}, res = [];
for(var i = 0, l = arr.length; i < l; i++)
obj[ arr[i] ] = (obj[ arr[i] ] || 0) + +arr[i]; // +arr[i] converts them to Numbers
// Now, obj = {"2": 6, "1": 2, "4": 4, "5": 5, "3": 3}
for(var i = 0, l = arr.length; i < l; i++)
if(arr.indexOf( arr[i] ) >= i) res.push( "" + obj[ arr[i] ] ); // Back to String
return res;
}
答案 3 :(得分:1)
这应该有效:
var arrayA = ["2", "1", "4", "2", "5", "1", "3", "2"];
var tmp={};
for (var i=0; i<arrayA.length; i++)
tmp[arrayA[i]] = (tmp[arrayA[i]]||0)+1;
var res=[];
for (var i=0; i<arrayA.length; i++)
if(tmp[arrayA[i]]) {
res.push(arrayA[i]*tmp[arrayA[i]]);
delete tmp[arrayA[i]];
}
res将是:
[6, 2, 4, 5, 3]
答案 4 :(得分:1)
使用下面给出的地图解决方案:
var arrIn = ["2", "1", "4", "2", "5", "1", "3", "2"];
var arrOut = sumOfDupl(arrIn);
console.log(arrOut);
function sumOfDupl(arr) {
var mapKey = new Map();
var mapSum = {};
var resultArray = [];
for(var i = 0; i < arr.length; i++) {
mapSum[arr[i]] = (+ mapSum[arr[i]])?(+ mapSum[arr[i]] + (+ arr[i])): (+ arr[i]);
mapKey.set(arr[i], 1);
}
for (var [key, value] of mapKey) {
resultArray.push(mapSum[key]);
}
return resultArray;
}