Преобразовать массив объектов в массив значений объектов
Я пытаюсь преобразовать этот массив
let orders = [
{ amount: '100', user: 'admin', date: 'March 6, 2019' },
{ amount: '120', user: 'admin', date: 'March 6, 2019' },
{ amount: '80', user: 'admin', date: 'March 7, 2019' },
{ amount: '200', user: 'admin', date: 'March 7, 2019' },
];
что-то вроде этого
orders = [
['100', 'admin', 'March 6, 2019'],
['120', 'admin', 'March 6, 2019'],
['80', 'admin', 'March 7, 2019'],
['200', 'admin', 'March 7, 2019'],
];
и я прочитал, что Objects.values()
возвращает значения в массиве, поэтому я попытался Object.values
массив order
, используя forEach()
и используя Object.values
для каждого элемента в массиве.
let newOrders = orders.forEach(order => {
return Object.values(order);
});
Я не знаю, правильно ли я делаю, и я новичок в Javascript. Пожалуйста, помогите мне.
Ответы
Ответ 1
Поскольку порядок значений в массиве, возвращаемых Object.values()
, не гарантирован, вы должны рассмотреть использование .map()
с некоторыми объектами Destructuring. Затем вы можете извлечь свойства объекта в отдельные переменные и явно вернуть их в нужном порядке.
const data = [
{ amount: '100', user: 'admin', date: 'March 6, 2019' },
{ amount: '120', user: 'admin', date: 'March 6, 2019' },
{ amount: '80', user: 'admin', date: 'March 7, 2019' },
{ amount: '200', user: 'admin', date: 'March 7, 2019' }
];
const result = data.map(({ amount, user, date }) => [amount, user, date]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Ответ 2
Порядок, в котором перечислены свойства объекта, не гарантируется (ссылка). Самое простое решение - явно указать ключи в желаемом порядке:
let result = orders.map(order => [order.amount, order.user, order.date]);
Ответ 3
Используя destructuring
. Используйте это, если в выводе требуется упорядочение свойства (объекта)
let orders = [
{ amount: '100', user: 'admin', date: 'March 6, 2019' },
{ amount: '120', user: 'admin', date: 'March 6, 2019' },
{ amount: '80', user: 'admin', date: 'March 7, 2019' },
{ amount: '200', user: 'admin', date: 'March 7, 2019' },
];
console.log(orders.map(({amount,user,date})=>[amount,user,date]))
Ответ 4
Просто используйте orders.map(Object.values)
let orders = [
{ amount: '100', user: 'admin', date: 'March 6, 2019' },
{ amount: '120', user: 'admin', date: 'March 6, 2019' },
{ amount: '80', user: 'admin', date: 'March 7, 2019' },
{ amount: '200', user: 'admin', date: 'March 7, 2019' },
];
const result = orders.map(Object.values);
console.log(result)
Ответ 5
Вы можете попробовать это:
orders.map((order) => Object.values(order));
map
вернет вам новый массив, в то время как forEach
просто выполняет обратный вызов для каждого элемента массива
Ответ 6
let orders = [
{ amount: '100', user: 'admin', date: 'March 6, 2019' },
{ amount: '120', user: 'admin', date: 'March 6, 2019' },
{ amount: '80', user: 'admin', date: 'March 7, 2019' },
{ amount: '200', user: 'admin', date: 'March 7, 2019' },
];
const result = orders.map(Object.values);
console.log(result)
Ответ 7
Более надежное решение, полезное, если у вас есть много случаев, когда у вас есть эти объекты struct
-like с различными порядками/ключами. Функциональный подход propsToArray
принимает ряд ключей в качестве отдельных параметров и возвращает функцию, которая выполняет желаемое преобразование объектов.
let orders = [
{ amount: '100', user: 'admin', date: 'March 6, 2019' },
{ amount: '120', user: 'admin', date: 'March 6, 2019' },
{ amount: '80', user: 'admin', date: 'March 7, 2019' },
{ amount: '200', user: 'admin', date: 'March 7, 2019' },
];
// option 1
let propsToArray = function(...keys) {
return function(obj) {
return keys.map(key => obj[key]);
}
};
// option 2
// propsToArray = (...keys) => (obj) => keys.map(key => obj[key]);
// resulting function
let orderToArray = propsToArray("amount", "user", "date");
console.log(orders.map(orderToArray));
Ответ 8
let orders = [{
amount: '100',
user: 'admin',
date: 'March 6, 2019'
},
{
amount: '120',
user: 'admin',
date: 'March 6, 2019'
},
{
amount: '80',
user: 'admin',
date: 'March 7, 2019'
},
{
amount: '200',
user: 'admin',
date: 'March 7, 2019'
},
];
let array = []; //initializing array
orders.forEach((element) => { //using array function for call back
for (var j in element) { //looping through each element of array
array.push(element[j]); //pushing each value of object present inside the orders
}
});
console.log(array); //array is ready