将对象数组转换为对象值数组

sun*_*ann 35 javascript arrays object javascript-objects

我正在尝试转换此数组

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' },
];
Run Code Online (Sandbox Code Playgroud)

像这样

orders = [
  ['100', 'admin', 'March 6, 2019'],
  ['120', 'admin', 'March 6, 2019'],
  ['80', 'admin', 'March 7, 2019'],
  ['200', 'admin', 'March 7, 2019'],
];
Run Code Online (Sandbox Code Playgroud)

并且我读过Objects.values()返回数组中值的内容,因此我尝试通过在order数组中的每个项目上使用forEach()和使用来遍历Object.values数组。

let newOrders = orders.forEach(order => {
  return Object.values(order);
});
Run Code Online (Sandbox Code Playgroud)

我不知道我在做什么是否正确,并且对Javascript不熟悉。请帮我。

Moh*_*man 44

由于Object.values()不能保证由传回的数组中的值的顺序,因此您应考虑将其.map()与某些Object 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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)


Sal*_*n A 22

不能保证枚举对象属性的顺序(ref)。最简单的解决方案是按所需顺序显式指定键:

let result = orders.map(order => [order.amount, order.user, order.date]);
Run Code Online (Sandbox Code Playgroud)


ell*_*sis 19

使用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]))
Run Code Online (Sandbox Code Playgroud)

使用mapObject.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' },
];
console.log(orders.map(e=>Object.values(e)))
Run Code Online (Sandbox Code Playgroud)

  • 这是相关的,因为这意味着您的代码可以为订单返回`['100','admin','March 6,2019']`,为另一个返回'['admin',80','March 7,2019']` 。 (15认同)
  • [JS对象不能保证顺序](/sf/answers/386807431/) (13认同)
  • 甚至更简单的`orders.map(Object.values)` (10认同)

小智 6

只需使用 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)
Run Code Online (Sandbox Code Playgroud)