2017-11-02 3 views
1

Ich arbeite mit einem Objekt Objekte. Ich muss es als ein Objekt behalten, weil ich mit einer API arbeite, die erfordert, dass ich es so behalte (dieser Teil ist nicht fraglich).Move Schlüssel im Objekt des Objekts nach oben (Indizes tauschen)

Dies ist ein Beispiel Schema meiner Aufgabe:

const obj = { 
    1: { name: 'Initial Step 1', stepNumber: 1 }, 
    2: { name: 'Initial Step 2', stepNumber: 2 }, 
    3: { name: 'Initial Step 3', stepNumber: 3 }, 
} 

Ich brauche eine moveUp Funktion implementiert, die jeweils die stepNumber und obj als den ersten und zweiten Parameter nehmen.

Diese moveUp Funktion muss grundsätzlich ein inneres Objekt mit dem Objekt darüber tauschen. Z.B. moveUp(2, obj) sollte die obj wie folgt ändern:

{ 
    1: { name: 'Initial Step 2', stepNumber: 1 }, 
    2: { name: 'Initial Step 1', stepNumber: 2 }, 
    3: { name: 'Initial Step 3', stepNumber: 3 }, 
} 

Die stepNumber wird nie an die Schnittstelle zu 1 dank gleich ich gebaut habe.

Wie soll ich meine moveUp Funktion implementieren?

Ich brauche im Grunde diese:

export const moveUp = (stepNumber, obj) => { 
    // I need help here 
}; 

Dank!

+0

Barry, wenn Sie auf der angegebenen Reihenfolge angewiesen sind, Sie gehen in ein Problem laufen. Objektschlüssel behalten keine konsistente Reihenfolge [Hier] (https://stackoverflow.com/questions/6959817/changing-the-order-of-the-object-keys) ist eine Diskussion darüber. – Beau

+0

Sollte Ihre Schrittnummer für 'Initial Step 2' auf 2 gesetzt sein? –

+0

@Callam Was soll dieser Snippet tun/anzeigen? O.o Die entsprechende Funktion ist leer ... – Andreas

Antwort

3

Sie könnten eine destructuring assignment nehmen und stepNumber anpassen.

function moveUp(object, key) { 
 
    [object[key], object[key - 1]] = [object[key - 1], object[key]]; 
 
    object[key].stepNumber++; 
 
    object[key - 1].stepNumber--; 
 
} 
 

 
var object = { 1: { name: 'Initial Step 1', stepNumber: 1 }, 2: { name: 'Initial Step 2', stepNumber: 2 }, 3: { name: 'Initial Step 3', stepNumber: 3 } }; 
 

 
moveUp(object, 2); 
 

 
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Das ist großartig, danke! –

0

Versuchen Sie, diese

let _ = require('lodash'); 
obj = { 
    1: { name: 'Initial Step 1', stepNumber: 1 }, 
    2: { name: 'Initial Step 2', stepNumber: 2 }, 
    3: { name: 'Initial Step 3', stepNumber: 3 }, 
    } 

function moveUp(sn, objToUp){ 
    console.log(objToUp); 
    let key = _.findKey(obj,{stepNumber: sn}); 
    let keys = Object.keys(obj); 
    let keyIndex = _.indexOf(keys, key); 
    if(keyIndex > 0){ 
     let tmp = obj[keys[keyIndex-1]]; 
     obj[keys[keyIndex-1]] = objToUp; 
     obj[keys[keyIndex]] = tmp; 
    } 
    console.log(obj); 
} 
moveUp(2, obj['2']); 
Verwandte Themen