Преобразовать массив объектов в массив значений объектов

Я пытаюсь преобразовать этот массив

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