Object.entries()
повертає масив, елементи якого є масивами, що відповідають переліченим [key, value]
парам властивостей, знайденим безпосередньо на object
. Порядок впорядкування властивостей такий самий, як заданий циклом перегляду значень властивостей об'єкта вручну.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Description
У Object.entries
функції повертає майже точні результати ви просите, за винятком клавіша є рядками замість цифр.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
console.log(Object.entries(obj));
Якщо вам потрібні ключі з цифрами, ви можете відобразити результат на новий масив з функцією зворотного виклику, яка замінює ключ у кожній парі на номер, примушений до нього.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(input);
return entries.map(entry => Object.assign(entry, { 0: +entry[0] }));
}
console.log(toNumericPairs(obj));
Я використовую функцію стрілки та Object.assign
для зворотного виклику карти у наведеному вище прикладі, щоб я міг утримувати її в одній інструкції, використовуючи той факт, що Object.assign
повертає призначений об’єкт, а зворотне значення функції єдиної стрілки є результатом інструкції.
Це еквівалентно:
entry => {
entry[0] = +entry[0];
return entry;
}
Як згадував @TravisClarke в коментарях, функцію карти можна скоротити до:
entry => [ +entry[0], entry[1] ]
Однак це створило б новий масив для кожної пари ключ-значення, замість того, щоб змінювати наявний масив на місці, отже, подвоюючи кількість створених масивів пар ключ-значення. Незважаючи на те, що вихідний масив записів все ще доступний, він і його записи не збиратимуть сміття.
Тепер, незважаючи на те, що в нашому методі in-place все ще використовується два масиви, що містять пари ключів-значень (вхідні та вихідні масиви), загальна кількість масивів змінюється лише на одиницю. Вхідні та вихідні масиви насправді не заповнюються масивами, а скоріше посилання на масиви та ці посилання займають незначну кількість місця в пам'яті.
- Змінення кожної пари ключових значень на місці призводить до незначного збільшення обсягу пам’яті, але потрібно ввести ще кілька символів.
- Створення нового масиву для кожної пари ключ-значення призводить до подвоєння необхідної кількості пам’яті, але потрібно набрати кілька менших символів.
Ви можете піти ще на крок і повністю усунути зростання, змінивши масив записів на місці замість того, щоб відобразити його на новий масив:
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(obj);
entries.forEach(entry => entry[0] = +entry[0]);
return entries;
}
console.log(toNumericPairs(obj));
NaN
натомість. Якщо ви хочете використовувати рядки як свої ключі, змініть повернення з[Number(key), obj[key]]
на[key, obj[key]]
або використовуйте так,Object.entries
як @Pila запропонував у своїй відповіді