🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

18967閲覧

連想配列のkeyを一括変更するには?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/09/22 22:39

編集2019/09/22 22:39

下のオブジェクト配列のkeyを0をidに、1をshopにしたいのですが、
for文で書くことはできましたが、
もっと簡潔に一括変更する方法はあるのでしょうか?

let srcData = [ {0:”id1”, 1:”店A“}, {0:”id2”, 1:”店B“}, {0:”id3”, 1:”店C“}, ]; // 以下のようなデータを作りたい。 // dstData = [ // {id:”id1”, shop:”店A“}, // {id:”id2”, shop:”店B“}, // {id:”id3”, shop:”店C“}, // ] dstData = []; for (let i = 0; i < srcData.length; i++) { dstData.push({ id: srcData[i][0], shop: srcData[i][1], }); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/09/22 22:50

キーの変更は大事なので、あとから変更するのではなく定義時点で使いたい名称で定義するものと思いますが、どのような経緯あってキーを変更したいのでしょうか
退会済みユーザー

退会済みユーザー

2019/09/22 22:56

コメントありがとうございます。 srcDataは、csv-parseモジュールで、csvファイルを読み込んだデータです。csvにヘッダがあれば、正しいkey名が付いたのですが、残念ながらヘッダをつけることができず、後から変更することにしました。
m.ts10806

2019/09/23 00:49

csv自体が自身で制御できる範囲にあるならそういうcsvを作るか、parse後ではなくparse時にkeyつけたほうが良さそうには思います
m.ts10806

2019/09/23 00:49

※質問の主旨からは外れているためこちらのコメントに書いています
guest

回答2

0

こんにちは
2つ回答します。

1. Object.entries() と Object.fromEntries() を使う

Object.entries() でキーと値の組を配列として得てから、それらの要素のキーのほうを変換し、Object.fromEntries() でオブジェクトに戻します。

keysAfter = [ 'id', 'shop']; srcData = srcData.map(e => Object.fromEntries( Object.entries(e).map(([k, v]) => [keysAfter[k], v]) ) );

2. Lodash の _.mapKeysを使う

配列やオブジェクトの操作で便利なライブラリLodash _.mapKeys を使うと、以下のように書けます。

javascript

1keysAfter = [ 'id', 'shop']; 2 3srcData = srcData.map(e => _.mapKeys(e, (v, k) => keysAfter[k]) );

以上、参考になれば幸いです。

投稿2019/09/23 00:42

編集2019/09/23 01:33
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/23 00:59

ありがとうございます! mapを使えばいいんですね。 あまり使ったことがなかったのでこれを機に見てみます
jun68ykt

2019/09/23 01:34 編集

どういたしまして。 ちなみに上記のコードは、キーが増えてもそのまま使えます。(※keysAfterへの追加は必要です) 例: https://codepen.io/jun68ykt/pen/RwbEeZm
guest

0

ベストアンサー

JavaScript

1dstData = srcData.map((e) => ({id: e[0], shop: e[1]}));

投稿2019/09/23 00:33

raccy

総合スコア21737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/23 01:00

ありがとうございます。 うまくできました。 簡潔な書き方を紹介していただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問