2016-05-22 68 views
2

我想從現有數組中創建一個新數組。條件是,如果元素是重複的,那麼總結這些元素。請參見實施例下面的詳細資料如可以是我不能夠清楚地解釋:JavaScript - 創建一個包含重複元素和唯一元素總和的未排序數組

輸入:

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

輸出:

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

這裏arrayB [0] = 2秒的總和(2 + 2 + 2),arrayB [1] = 1的總和(1 + 1)

我嘗試了很多,但無法弄清楚如何實現這一點。

請幫忙!

+0

如果'arrayA'進行分選, , 這個會 是一個更容易的問題。那麼你能簡單地把它作爲第一步嗎?另外,'arrayB'必須以任何特定的順序? –

回答

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

感謝您編輯@blex – Cyril

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

您可以通過循環第一時間總結起來,和第二次重新創建數組做到這一點:

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

資源將是:

[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; 
    } 
    
相關問題