web-dev-qa-db-ja.com

オブジェクトの配列をオブジェクトの値の配列に変換します

この配列を変換しようとしています

_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()が配列の値を返すことを読んだので、forEach()と_Object.values_を使用してorder配列を反復処理しようとしました配列内の各アイテム。

_let newOrders = orders.forEach(order => {
  return Object.values(order);
});
_

私がやっていることが正しいかどうかはわかりませんが、JavaScriptは初めてです。私を助けてください。

35
sunny_adriann

Object.values() によって返される配列内の値の順序は保証されていないため、いくつかの .map() の使用を検討する必要があります- オブジェクトの破壊 。次に、オブジェクトのプロパティを個別の変数に抽出し、それらを目的の順序で明示的に返すことができます。

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; }
45
Mohammad Usman

オブジェクトのプロパティが列挙される順序は保証されていません( ref )。最も簡単な解決策は、目的の順序でキーを明示的に指定することです。

let result = orders.map(order => [order.amount, order.user, order.date]);
22
Salman A

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]))

オブジェクトから値を取得するには、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' },
];
console.log(orders.map(e=>Object.values(e)))
20
ellipsis

単に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)
3
Khyati Sharma
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)
1
Vipul

あなたはこれを試すことができます:

orders.map((order) => Object.values(order));

mapは新しい配列を返しますが、forEachは配列の各要素に対してコールバックを行うだけです

1

より堅牢なソリューションで、異なる順序/キーを持つこれらのstructのようなオブジェクトが多数ある場合に役立ちます。機能的なアプローチである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));
0
Conor O'Brien
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
0
Vipul