簡體   English   中英

在javascript中移動對象元素位置

[英]Move object element position in javascript

我正在嘗試找到一種方法來將對象元素移動到特定位置。

例如,我有這個對象:

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

我搜索將element3移動到第一個位置:

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

謝謝你的幫助 !

JavaScript對象沒有排序。 您應該改為使用對象數組。

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

然后,您可以將其重新排序,例如:

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

也許您然后可以根據id來獲取特定元素:

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

JavaScript中的對象本質上是哈希映射。 它們的屬性本身沒有任何順序。 它們只是名稱值對。

您可能將對象與數組混淆,在這種情況下,排序確實很重要。

這是我執行該邏輯的代碼。 謝謝!

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