Every search for how to reorder (NOT SORT) an element inside of an object of an array of objects keeps returning how to SORT an array. That's not what I want.
Here's a quit and dirty example:
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"
}
]
What I want to do is LOOP through all the objects and REORDER them so id is NOW in name's position for all of them, like so:
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"
}
]
Here's the code I've tried:
$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;
}
What happens is that the INCOMING arr loses SCOPE and when it hits splice, I get SPLICE is a function.
Yes, I'm working for a LARGE telecom STILL using AngularJS. Anyway, it's simply pure javascript at this point.
Here you go, though be aware that object field order cannot be guaranteed.
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)