質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

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

Q&A

解決済

3回答

353閲覧

javascriptで配列と一致するオブジェクトをフィルタリングしたい。

latte217

総合スコア19

JavaScript

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

1グッド

0クリップ

投稿2022/09/12 09:22

前提

javascript の処理について教えてください。

実現したいこと

もしかしたら超基本的なことかもしれないですが
以下のようなオブジェクトと配列があり

const obj={100:{a:1},200:{a:2},300:{a:3}} const arr=[100,200]

このarrを使って、最終的にフィルタリングした新しいオブジェクト
として、

const result ={100:{a:1},200:{a:2}}

とする処理を考えています。

試したこと

Object.keysやObject.filter など組み合わせてトライしていましたが
うまくいかない状況です。

お手間おかけしますが、教えていただけましたら幸いです。

CodePenにてテストしております。

よろしくお願いいたします。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答3

0

こんな感じでしょうか:

javascript

1const result = Object.fromEntries(Object.entries(obj).filter(([key]) => arr.includes(+key)));

👉 https://codepen.io/su507/pen/rNvLoLd?editors=0012

もしくはlodash使ってよければ _.pickBy

javascript

1const result = _.pickBy(obj, (_, key) => arr.includes(+key));

👉 https://codepen.io/su507/pen/abGZPBR?editors=0012

投稿2022/09/12 09:45

編集2022/09/12 09:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

latte217

2022/09/12 10:14

su507様  回答ありがとうございます!  lodashについても勉強してみます!  Object.fromEntries は使ったことがなかったので、非常に勉強になりました。  
退会済みユーザー

退会済みユーザー

2022/09/12 12:31

今回の質問では、arr 側から拾っていったほうが簡単でしたね・・・ とはいえ、あるオブジェクトを元にして、何らかの条件を満たすエントリ(プロパティ名と値のペア)だけを残したオブジェクトを作りたいとき、 Object.entries でエントリの配列にバラす → filter で何らかの条件に合うエントリだけ残す → 残ったエントリの配列からObject.fromEntries でオブジェクトを作る。 というのはわりとよく使う手です。
latte217

2022/09/12 22:51

>Object.entries でエントリの配列にバラす >→ filter で何らかの条件に合うエントリだけ残す >→ 残ったエントリの配列からObject.fromEntries でオブジェクトを作る。 知っているのと知らないのでは大きく差が出ますね! 改めて勉強してよくおっしゃることがわかりました。 ありがとうございます!
guest

0

ベストアンサー

javascript

1const obj={100:{a:1},200:{a:2},300:{a:3}}; 2const arr=[100,200]; 3const result=arr.reduce((x,y)=>(x[y]=obj[y],x),{}); 4console.log(result);

投稿2022/09/12 10:01

yambejp

総合スコア114960

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

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

latte217

2022/09/12 10:19

yambejp様  回答ありがとうございます。  reduceもトライしていたのですが、たどり着けなかったので  非常に勉強になりました。  同じ結果でもいくつものやり方があることを改めて、学びました。  引き続きよろしくお願いいたします。
guest

0

JavaScript

1const obj={100:{a:1},200:{a:2},300:{a:3}} 2const arr=[100,200] 3const result = {}; 4arr.map((a)=>{result[a] = obj[a]}); 5console.log(result);

投稿2022/09/12 09:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

latte217

2022/09/12 10:17

mosburger0315 ._.様  迅速な回答ありがとうございました!  「こんなこともわからんのか!」というレベルで申し訳ありません。  非常にわかりやすい回答いただき感謝いたします。  今後、いろいろ応用できればと思います。
退会済みユーザー

退会済みユーザー

2022/09/12 10:41

latte217様 コメントありがとうございます! 実は、私もこの質問を受けて初めて作りました!なので私もわかっていなかったり… 質問者様のお役に立てて嬉しい限りです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問