最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Move object element position in javascript - Stack Overflow

programmeradmin14浏览0评论

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 !

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 !

Share Improve this question asked Aug 12, 2014 at 9:38 amiceliamiceli 4555 gold badges12 silver badges29 bronze badges 1
  • 1 You can't do that. JavaScript objects don't have order. Use an array. – Ram Commented Aug 12, 2014 at 9:39
Add a ment  | 

3 Answers 3

Reset to default 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';
});

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" : {},
}

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.

发布评论

评论列表(0)

  1. 暂无评论