每次搜索如何重新排序(不排序)物件陣列的物件內的元素都會回傳如何對陣列進行排序。那不是我想要的。
這是一個退出和骯臟的例子:
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 現在在所有物件的名稱位置,如下所示:
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;
}
發生的情況是 INCOMING arr 丟失了 SCOPE,當它遇到 splice 時,我得到 SPLICE 是一個函式。
是的,我仍在使用 AngularJS 為一家大型電信公司作業。無論如何,在這一點上它只是純 javascript。
uj5u.com熱心網友回復:
到此為止,但請注意無法保證物件欄位順序。
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)
uj5u.com熱心網友回復:
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
}
});
請注意,這將用具有所需順序的新物件替換您的物件。如果您的應用程式參考了任何舊物件,這可能是不可取的。
如果您希望保持物件參考不變,您可以改為 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;
});
再一次,這一切似乎都沒有必要。我能想到的唯一可能有意義的情況是,如果您需要將資料傳遞給某個真正關心非有序屬性的“順序”的行程(這似乎是破碎和脆弱的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/371113.html
