簡體   English   中英

如何對未排序的對象數組的 OBJECT 中的元素重新排序?

[英]How can I reorder an ELEMENT inside of an OBJECT of an array of OBJECTS NOT sort?

每次搜索如何對對象數組的 object 中的元素進行重新排序(不排序)時,都會返回如何對數組進行排序。 那不是我想要的。

這是一個退出和骯臟的例子:

let obj = [
  {
     name: "hi number 1a",
     id: "hi number 2a",
     address: "hi number 3a"
  },  {
     name: "hi number 1b",
     id: "hi number 2b",
     address: "hi number 3b"
  },  {
     name: "hi number 1c",
     id: "hi number 2c",
     address: "hi number 3c"
  },  {
     name: "hi number 1d",
     id: "hi number 2d",
     address: "hi number 3d"
  }
]

我想要做的是遍歷所有對象並重新排序它們,因此 id 現在在名稱的 position 中為所有對象,如下所示:

let obj = [
  {
     id: "hi number 2a",
     name: "hi number 1a",
     address: "hi number 3a"
  },  {
     id: "hi number 2b",
     name: "hi number 1b",
     address: "hi number 3b"
  },  {
     id: "hi number 2c",
     name: "hi number 1c",
     address: "hi number 3c"
  },  {
     id: "hi number 2d",
     name: "hi number 1d",
     address: "hi number 3d"
  }
]

這是我嘗試過的代碼:

        $scope.arraymove = (arr, fromindex, toindex) => {

            let len = arr.length;
            let newArr = [];
            let resultArr = [];

            for (let i = 0; i < len; i++) {
                resultArr[i] = move(arr[i], fromindex, toindex);
                newArr.push(resultArr[i]);
            }

            function move(thearr, old_index, new_index) {
                while (old_index < 0) {
                    old_index += len;
                }
                while (new_index < 0) {
                    new_index += len;
                }
                if (new_index >= len) {
                    var k = new_index - len;
                    while ((k--) + 1) {
                        thearr.push(undefined);
                    }
                }
                thearr.splice(new_index, 0, thearr.splice(old_index, 1)[0]); // CODE DIES HERE

                console.log("NEW ARRAY: ", thearr);
                return thearr;
            }

            console.log("New Reordered ARRAY: ", newArr);
            return newArr;
        }

發生的情況是傳入的 arr 丟失了 SCOPE,當它遇到拼接時,我得到 SPLICE 是 function。

是的,我仍在使用 AngularJS 為大型電信公司工作。 無論如何,此時它只是純粹的 javascript。

這里是 go,但請注意,不能保證 object 字段順序。

 let obj = [ { name: "hi number 1a", id: "hi number 2a", address: "hi number 3a" }, { name: "hi number 1b", id: "hi number 2b", address: "hi number 3b" }, { name: "hi number 1c", id: "hi number 2c", address: "hi number 3c" }, { name: "hi number 1d", id: "hi number 2d", address: "hi number 3d" } ] let newobj = obj.map( o => ({id: o.id, name: o.name, address: o.address})); console.log(newobj)

JavaScript 對象中的屬性沒有明確的順序。 不過,通常情況下,它們按添加順序表示。 “重新排列”這些屬性似乎更像是一場強迫症冒險,而不是任何事情。 沒有“位置 0”。

也就是說,如果我在這個強迫症任務中,我會做一些非常簡單的事情:

let obj = [
  {
     name: "hi number 1a",
     id: "hi number 2a",
     address: "hi number 3a"
  },  {
     name: "hi number 1b",
     id: "hi number 2b",
     address: "hi number 3b"
  },  {
     name: "hi number 1c",
     id: "hi number 2c",
     address: "hi number 3c"
  },  {
     name: "hi number 1d",
     id: "hi number 2d",
     address: "hi number 3d"
  }
];

obj = obj.map(function(instance){
    return {
        id: instance.id,
        name: instance.name,
        address: instance.address
    }
});

請注意,這會將您的對象替換為具有所需順序的新對象。 如果您的應用程序引用了任何舊對象,這可能是不可取的。

如果您希望保持 object 引用完整,您可以改為 forEach() 您的數組,復制屬性,刪除它們,然后重新分配。 像這樣的東西:

obj.forEach(function(instance){
   let temp = {
        id: instance.id,
        name: instance.name,
        address: instance.address
    };
    delete instance.id;
    delete instance.name;
    delete instance.address;
    instance.id = temp.id;
    instance.name = temp.name;
    instance.address = temp.address;
});

再一次,這一切似乎都是不必要的。 我能想到的唯一可能有意義的情況是,如果您需要將數據傳遞給某個真正關心非序數屬性的“順序”的進程(這似乎是破碎和脆弱的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM