2016-05-19 10 views
0

Ich habe ein eindimensionales Feld von einer Reihe von Zahlen:Return Zweidimensionale Array von Single-Dimensional Array in JavaScript

var x = ['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904']; 

Ich versuche, die Summe der Ziffern jeder Zahl daneben einfügen zu schaffen eine zweidimensionale Anordnung, so dass der Ausgang ist:

[ [ '9493-4937-288383-8473', 96 ], 
[ '4838-38403-8484', 65 ], 
[ '9384-3848-4978-4944', 96 ], 
[ '3920-2108-2845-1904', 58 ] ] 

Leider ist mein Code:

for (var i = 0; i < x.length; i ++) { 
    var y = x[i].replace(/[-)(]/g,''); 

    var sum = 0; 
    var z = y; 
    while (z > 0) { 
    sum = sum + z % 10; 
    z = Math.floor(z/10); 
    } 

    var xWithSum = [x[i]]; 

    xWithSum.push(sum); 

    console.log(xWithSum); 

} 

Ergebnisse in der folgenden Ausgabe statt:

[ '9493-4937-288383-8473', 96 ] 
[ '4838-38403-8484', 65 ] 
[ '9384-3848-4978-4944', 96 ] 
[ '3920-2108-2845-1904', 58 ] 

Das heißt, ich bin mit vier separaten zweidimensionalen Anordnungen enden eher als eine zweidimensionale Anordnung mit vier Punkten.

Wird mir bitte jemand den Fehler meiner (Neuling) JavaScript-Möglichkeiten zeigen?

+1

Sollte die Summe der ersten Nummer nicht 102 sein? –

+1

drücken Sie einfach Ihr Ergebnis in ein neues Array. – Craicerjack

Antwort

3

Sie benötigen xWithSum auf eine Ergebnismatrix zu schieben.

var x = ['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904']; 
 
var result = []; 
 
for (var i = 0; i < x.length; i++) { 
 
    var y = x[i].replace(/[-)(]/g, ''); 
 

 
    var sum = 0; 
 
    var z = y; 
 
    while (z > 0) { 
 
    sum = sum + z % 10; 
 
    z = Math.floor(z/10); 
 
    } 
 

 
    var xWithSum = [x[i], sum]; 
 
    result.push(xWithSum); 
 
} 
 

 
console.log(result);

Sie auch .map() verwenden könnte eine Funktion auf jedes Element eines Arrays zu laufen und ein Array der Ergebnisse zurück.

var x = ['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904']; 
 
var result = x.map(function(el) { 
 
    var y = el.replace(/[-)(]/g, ''); 
 

 
    var sum = 0; 
 
    var z = y; 
 
    while (z > 0) { 
 
    sum = sum + z % 10; 
 
    z = Math.floor(z/10); 
 
    } 
 

 
    var xWithSum = [el, sum]; 
 
    return xWithSum; 
 
}); 
 

 
console.log(result);

0

Statt

for (...) { 
    ... 
    console.log(x); 
} 

etwas tun, wie

var result = []; 
for (...) { 
    ... 
    result.push(x); 
} 
console.log(result); 

Auch Ihren Weg, um die Summe der Zählung wird nicht funktionieren, wie Sie eine 16-stellige ganze Zahl in eine JavaScript-Zahl zu laden versuchen. Das wird nicht funktionieren, JavaScript-Nummern haben nicht so viel Präzision. Sie können die Summe stattdessen auf diese Weise berechnen:

var sum = 0; 
str.replace(/\d/g, x => sum+= +x); 
console.log(sum); 
0

Könnten Sie nicht nur ... ein Array darüber erstellen und das Ergebnis an diesem Array schieben?

function converArr (x) { 
    resultArr = []; 

    for (var i = 0; i < x.length; i ++) { 
    var y = x[i].replace(/[-)(]/g,''); 

    var sum = 0; 
    var z = y; 
    while (z > 0) { 
     sum = sum + z % 10; 
     z = Math.floor(z/10); 
    } 

    var xWithSum = [x[i]]; 

    xWithSum.push(sum); 
    resultArr.push(xWithSum); 
    } 

    return resultArr; 
} 

convertArr(['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904']); 
0
var x = ['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904']; 

// Loop through everything 
for (var i = x.length - 1; i >= 0; i--) { 

    // Replace each element with [element, digitsSum] 
    x[i] = [x[i], getDigitsSum(x[i])]; 

} 

// x now is as described 
3

könnten Sie iterieren nur über die Elemente und über die Charaktere zum Summieren.

var x = ['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904'], 
 
    y = x.map(function(a) { 
 
     return [a, a.split('').reduce(function(a, b) { 
 
      return a + (Number(b) || 0); 
 
     }, 0)]; 
 
    }); 
 

 
console.log(y);

0

Sie können Array.prototype.reduce verwenden Ihre Array von Strings in das gewünschte Format zu reduzieren, wie unten:

var x = ['9493-4937-288383-8473', '4838-38403-8484', '9384-3848-4978-4944', '3920-2108-2845-1904']; 

var result = x.reduce(function(prev, current) { 
    var curr = current.replace(/-/g, ""); 
    var sum = curr.split("").reduce(function (b, a) { 
     return parseInt(a, 10) + b; 
    }, 0); 

    prev.push([current, sum]); 
    return prev; 
}, []); 

console.log(result); 
1

Eine weitere "Sie konnte es einfach":

x.map(function (num) { 
    return [num, eval(num.replace(/\D*(\d)\D*/g, "$1+") + "0")]; 
});