🙆

配列の中に入っているオブジェクトから 2次元配列を作る

2022/09/25に公開

頭がピヨってすぐ分からなくなる。
泣きついて@taitoに教えてもらった。

やりたいこと

これを

[
  {
    “id”:01234",
    “name”: “TestName01"
  },
  {
    “id”:12345",
    “name”: “TestName02"
  }
]

こうしたい

[[01234, ‘TestName01’], [12345, ‘TestName02’]]

やる


function test() {
  const member = [
    {
      "id": "01234",
      "name": "TestName01"
    },
    {
      "id": "12345",
      "name": "TestName02"
    }
  ]

  const arrayMember = recordsMapValues_(member)
  console.log(arrayMember)
}

/**
 * オブジェクト配列 から 2次元配列(表) を作る
 * @param {Array<object>} records - オブジェクト配列
 * @return {Array<Array>} values - 2次元配列
 */
function recordsMapValues_(records) {

  const values = [];

  values.push(Object.keys(records[0])); // ヘッダー

  records.forEach(record => values.push(Object.values(record))); // 値

  return values;

}

やってること

Object.keys()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

Object.values()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values

forEach()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

空配列を  const values = []; で作る。これで[]ができた。
ここに、ヘッダー的要素としてオブジェクトのkeyを追加する、それを values.push(Object.keys(records[0]))でやっている。
records[0]が { "id": "01234", "name": "TestName01"}であり、そのkeyである id,name が[]に入る。keysとなっているが、配列の0だけを指定することで実質kye単数になってる的な。

次に、これと同じような形、逆のような形で、オブジェクトの値(value)を[]に入れていきたい。ヘッダー的要素とは異なり、複数のレコードがあるのでforEachでやっている。

参考

配列の中にオブジェクトが入っている場合のvalue値の取得方法二次元配列 Javascript
https://qiita.com/shuichi0712/items/cf966ad8bae9e610ea32

Discussion