JavaScript - 创建一个未排序的数组,其中包含重复元素和唯一元素的总和

问题描述 投票:2回答:5

我正在尝试从现有数组创建一个新数组。条件是如果元素是重复的,那么对这些元素求和。有关详细信息,请参阅下面的示例,因为我无法解释清楚:

输入:

var arrayA = ["2", "1", "4", "2", "5", "1", "3", "2"];

输出:

var arrayB = ["6", "2", "4", "5", "3"];

这里arrayB [0] = 2s之和(2 + 2 + 2),arrayB [1] = 1s之和(1 + 1)

我尝试了很多,但无法弄清楚如何实现这一目标。

请帮忙!

javascript jquery arrays
5个回答
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)

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]

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

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. 使用下图给出的解决方案: 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; }
© www.soinside.com 2019 - 2024. All rights reserved.