2016-04-29 6 views
1

Ich habe 2 Sätze Objekt, ein Beispiel:Javascript spielt mit Objektpositionen

var objA = {}; 
    objA.data1a = 100; 
    objA.data2a = 70; 
    objA.data3a = 16; 
    objA.data4a = 37; 
    objA.data5a = 88; 
    //my ObjA will contain the following 
    //{"data1a":100, "data2a":70, ......... "data5a":88} 

var objB = {} 
    objA.data1b = 19; 
    objA.data2b = 5; 
    objA.data3b = 7; 
    objA.data4b = 6; 
    objA.data5b = 2; 

var getDifferences = {}; 

//I want to get the differences using a loop but I'm not sure how am I able to do so. 
//I am able to do this currently 
// getDifferences.data1 = objA.data1a - objB.data1b; 
// getDifferences.data2 = objA.data2a - objB.data2b; 
// getDifferences.data3 = objA.data3a - objB.data3b; 

kann ich wissen, ob eine Schleife zu Schleife durch ein Objekt gibt es so für jede Schleife, dass ich kann, minus und speichere die Unterschiede in ein anderes Objekt?

+2

Sie eine bessere iterable Struktur wie ein Array betrachten kann und nicht ein Objekt –

Antwort

2

Eine Iteration über die Schlüssel. Ich nehme an, dass objB die anderen Werte enthalten sollte.

var objA = { data1a: 100, data2a: 70, data3a: 16, data4a: 37, data5a: 88 }, 
 
    objB = { data1b: 19, data2b: 5, data3b: 7, data4b: 6, data5b: 2 }, 
 
    getDifferences = {}; 
 

 
Object.keys(objA).forEach(function (k) { 
 
    var kk = k.substring(0, k.length - 1); 
 
    getDifferences[kk] = objA[kk + 'a'] - objB[kk + 'b']; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(getDifferences, 0, 4) + '</pre>');

Mehr Beispiel

Was wäre, wenn .. meine Benennung unterschiedlich waren? BEISPIEL: var storeA = {}; {"1000": 532, "2020": 123} und var storeB = {}; { "1000" in 200, "2020": 12}

var storeA = {"1000": 532, "2020": 123}, 
 
    storeB = {"1000": 200, "2020": 12}, 
 
    getDifferences = {}; 
 

 
Object.keys(storeA).forEach(function (k) { 
 
    getDifferences[k] = storeA[k] - storeB[k]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(getDifferences, 0, 4) + '</pre>');

Noch Beispiel

in STOREX obj und Storey obj. {'4100': 3060431, '4130': 4413045, '16386': 4191921, '17476': 4161761} {'4100': 3332286, '4130': 7640173, '16386': 5773080, '17476': 4692493}

var storeA = { '4100': 3060431, '4130': 4413045, '16386': 4191921, '17476': 4161761 }, 
 
    storeB = { '4100': 3332286, '4130': 7640173, '16386': 5773080, '17476': 4692493 }, 
 
    getDifferences = {}; 
 

 
Object.keys(storeA).forEach(function (k) { 
 
    getDifferences[k] = Math.abs(storeA[k] - storeB[k]); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(getDifferences, 0, 4) + '</pre>');

+0

Dank. Was wäre, wenn ... meine Namensgebung anders wäre? BEISPIEL: var storeA = {}; {"1000": 532, "2020": 123} und var storeB = {}; {"1000": 200, "2020": 12} –

+0

dann könnten Sie es direkt zuordnen. –

+0

Ich denke, es wird einfacher, wenn ich nur die genauen Daten auflisten werde, die ich habe. –

0

Ja, man kann tatsächlich diese mit Object.keys() Funktion tun. Hier ist mein Beispiel, dies zu tun:

var objA = {}; 
    objA.data1a = 100; 
    objA.data2a = 70; 
    objA.data3a = 16; 
    objA.data4a = 37; 
    objA.data5a = 88; 
    //my ObjA will contain the following 
    //{"data1a":100, "data2a":70, ......... "data5a":88} 

var objB = {} 
    objB.data1b = 19; 
    objB.data2b = 5; 
    objB.data3b = 7; 
    objB.data4b = 6; 
    objB.data5b = 2; 

var getDifferences = {}; 

/// ================= 

var keysA = Object.keys(objA); 
var keysB = Object.keys(objB); 

if (keysA.length == keysB.length) { 
    for (i = 0; i < keysA.length; i++) { 
     getDifferences['data'+i] = objA[keysA[i]] - objB[keysB[i]]; 
    } 
} 

console.log(getDifferences);