Привет!
У нас есть как минимум 3 способа, чтобы конвертировать объект в массив.
В массиве есть массив методов. Преобразовав объект в массив, вы получите доступ ко всему этому. Юху! ?
const zoo = {
lion: '?',
panda: '?',
};
Object.keys(zoo);
// ['lion', 'panda']
Object.values(zoo);
// ['?', '?']
Object.entries(zoo);
// [ ['lion', '?'], ['panda', '?'] ]Время для истории
Древние времена
Давным-давно, в далекой галактике, проходиться по объектам было не так-то просто. Ок, я немного преувеличил ?. Но я помню, что всякий раз, когда мне нужно было преобразовать объект в массив, мне приходилось делать что-то вроде этого.
var numbers = {
one: 1,
two: 2,
};
var keys = [];
for (var number in numbers) {
if (numbers.hasOwnProperty(number)) {
keys.push(number);
}
}
keys; // [ 'one', 'two' ]Я все время был зол и хотел найти лучший способ.
ES6 — Object.keys
И тут появился ES6! Моя жизнь изменилась! Наконец-то у нас есть более простой способ ?
Теперь был встроенный метод, который быстро превращает все ключи в моем объекте в массив:
const numbers = {
one: 1,
two: 2,
};
Object.keys(numbers);
// [ 'one', 'two' ]
Жизнь была прекрасна! Но потом я снова рассердился. Почему я могу извлекать только ключи, мне тоже нужны значения! Люди всегда хотят большего, не так ли ? А потом появился ES2017…
Object.values
Привет, я ES2017 и исполняю все твои пожелания. Теперь вы можете легко извлечь значения в массив одним методом.
const numbers = {
one: 1,
two: 2,
};
Object.values(numbers);
// [ 1, 2 ]Object.entries
Но ES2017 на этом не остановился. Сейчас я могу получить и ключи, и значения. Я потрясен.
const numbers = {
one: 1,
two: 2,
};
Object.entries(numbers);
// [ ['one', 1], ['two', 2] ]Object.entries + Деструктуризация
const numbers = {
one: 1,
};
const objectArray = Object.entries(numbers);
objectArray.forEach(([key, value]) => {
console.log(key); // 'one'
console.log(value); // 1
});ES6, ты просто лучший!
Конец истории
А теперь идите и поиграйтесь со всеми этими удивительными методами ?
Поддержка браузерами
У Object.keys лучшая поддержка. Когда я говорю лучшая — это означает, что его поддерживает Internet Explorer. Object.values и Object.entries, к сожалению, не поддерживаются IE. Но всегда есть полифил для них.
Polyfill
Но это еще не все!
Ваш следующий вопрос может заключаться в том, как мне преобразовать массив обратно в объект. Есть новый метод Object.fromEntries. По сути, это противоположность Object.entries.
const array = [
['one', 1],
['two', 2],
];
Object.fromEntries(array);
// { one: 1, two: 2 }Это очень новый метод, так что поддержка есть не везде.
Спасибо за внимание!
Вольный перед статьи.
Оригинал статьи: ссылка