1

I'm working with an object of objects. I need to keep it as an object because I'm work with an API that requires me to keep it that way (that part is not debatable).

This is an example schema of my object:

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

I need to implemented a moveUp function that will take the stepNumber and obj as the first and second parameters respectively.

This moveUp function basically needs to swap one inner object with the object above it. Eg. moveUp(2, obj) should change the obj as follows:

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

The stepNumber will never be equal to 1, thanks to the interface I've built.

How should I implement my moveUp function?

I basically need this:

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

Thanks!

Barry Michael Doyle
  • 9,333
  • 30
  • 83
  • 143

2 Answers2

3

You could take a destructuring assignment and adjust stepNumber.

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; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

Try this

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']);
Rahul Patil
  • 493
  • 5
  • 14