Мне было интересно, как я мог бы переупорядочить массив так, чтобы каждый объект имел собственный индекс id
- 1.
//Lets say we have an array like so
var unOrderedArray=[{Id:2,Name:"Bob"}, {Id:1,Name:"Julian"},
{Id:3,Name:"Jeff"}]
Какую функцию я могу написать, чтобы получить:
var orderedArray=[{Id:1,Name:"Julian"},{Id:2,Name:"Bob"},{Id:3,Name:"Jeff"}]
Пока я пробовал это, но это не работает:
for(let i = 0;i<unOrderedArray.length;i++){
correctlyOrderedArray[unOrderedArray[i].Id]=unOrderedArray[i];
}
P.S ! Не гарантируется, что самый низкий Id равен 1 и что между самым низким и самым высоким Id нет промежутков, например 2,10,5,3 и т. Д.
4 ответа
Вы можете использовать массив # уменьшение, чтобы создать массив с элементами, размещенными в соответствии с их идентификаторами. Однако, если идентификаторы не являются непрерывными, вы получите разреженный массив (массив с дырками - undefineds
).
var unOrderedArray=[{Id:2,Name:"Bob"}, {Id:1,Name:"Julian"}, {Id:3,Name:"Jeff"}, {Id:10,Name:"Tom"}];
var orderedArray = unOrderedArray.reduce(function(arr, item) {
arr[item.Id - 1] = item;
return arr;
}, []);
console.log(orderedArray); // since the Tom's id is 10, you'll get 6 undefined items between Tom and Jeff
На самом деле, так как массивы основаны на нуле, можно сделать:
const result = [];
for(var obj of unOrderedArray){
result[obj.Id] = obj;
}
Что приводит к
[undefined, { Id:1,Name:"Bob"},...]
Так можно сделать
result[1]
Чтобы получить объект с идентификатором один.
Если вы не уверены, будут ли идентификаторы идеально последовательными 1-N, вы можете использовать это:
const sortById = arr => {
if (!arr.length) return arr;
const max = Math.max(...arr.map(obj => obj.Id));
let result = Array(max).fill(null);
arr.forEach(obj => result[obj.Id] = obj);
return result;
};
Используйте sort
метод. Неважно, какие у вас Id
.
var unOrderedArray=[{Id:21,Name:"Bob"}, {Id:5,Name:"Julian"},
{Id:313,Name:"Jeff"}, {Id:4,Name:"Ivan"}];
orderedArray = unOrderedArray.sort(function(a, b) {
return a.Id - b.Id;
});
console.log(orderedArray);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.