简体   繁体   English

在javascript中移动对象元素位置

[英]Move object element position in javascript

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移动到第一个位置:

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

Thanks for your help ! 谢谢你的帮助 !

JavaScript objects don't have ordering. JavaScript对象没有排序。 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: 也许您然后可以根据id来获取特定元素:

var out = arr.filter(function (el) {
  return el.id === 'element1';
});

Objects in JavaScript are essentially hash maps. JavaScript中的对象本质上是哈希映射。 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. 您可能将对象与数组混淆,在这种情况下,排序确实很重要。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM