1

I'm trying to find a way to move an object element to a specific position.

For example, I've this object :

{
    "element1" : {} // object,
    "element2" : {},
    "element3" : {}
}

And I search to move element3 at the first position :

{
    "element3" : {},
    "element1" : {},
    "element2" : {}
}

Thanks for your help !

1
  • 1
    You can't do that. JavaScript objects don't have order. Use an array. Commented Aug 12, 2014 at 9:39

3 Answers 3

4

JavaScript objects don't have ordering. You should use an array of objects instead.

var arr = [
  { id: 'element1' },
  { id: 'element2' },
  { id: 'element3' }
]

You could then reorder it something like:

var first = arr.splice(0, 1);
arr.push(first);

Maybe you could then grab specific elements based on id:

var out = arr.filter(function (el) {
  return el.id === 'element1';
});
Sign up to request clarification or add additional context in comments.

2 Comments

Should it not be arr.push( first[0] ); ?
@Andy, there is any method to do this on ArrayList?
1

Here's my code for doing that logic. Thanks!

function _moveElementObject(object, from, to) {
    var newObjects = [];
    var newObject = {};
    var oldObject = {};
    var firstObject = {};
    var lastObject = {};
    var toMoveKey = "";
    var toMoveValue;
    oldObject = object;
    var objLength = _countProperties(oldObject);
    var keyNo = 1;
    for (var key in oldObject) {
        if (keyNo == from) {
            toMoveKey = key;
            toMoveValue = oldObject[key];
        }
        keyNo++;
    }
    console.log(oldObject);

    keyNo = 1;
    for (var key in oldObject) {
        if (keyNo < to) {
            firstObject[key] = oldObject[key];
            newObject[key] = firstObject[key];
        }
        keyNo++;
    }
    console.log(firstObject);

    keyNo = 1;
    for (var key in oldObject) {
        if (to <= objLength) {
            lastObject[key] = oldObject[key];
        }
        keyNo++;
    }
    delete lastObject[toMoveKey];
    newObject[toMoveKey] = toMoveValue;

    for (var key in lastObject) {
        newObject[key] = lastObject[key];
    }
    console.log(newObject);
    console.log("push");
    return newObject;
}

var sampleObj = {
    "element1" : {} // object,
    "element2" : {},
    "element3" : {}
};

_moveElementObject(sampleObj,3,1);

// output object,
{
    "element3" : {},
    "element1" : {}, 
    "element2" : {},
}

Comments

0

Objects in JavaScript are essentially hash maps. Their properties don't have any ordering, per se. They are simply name value pairs.

You are probably confusing objects with arrays, in which case ordering does indeed matter.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.