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

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

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

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

Q&A

解決済

2回答

1019閲覧

javascript特定のキーの情報のみキーとvalueセットで抜き出したい

ms5025

総合スコア292

JavaScript

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

0グッド

0クリップ

投稿2021/10/06 03:14

編集2021/10/06 05:57

前提・実現したいこと

javascript で以下のように特定のキーの値のみ抜き出したいのですが
そのような方法はありますか?
numというキーの値のみ抜き出したいです

before

1const obj1 = { 2 num: 1, 3 hoge: ture, 4 hage: false, 5}

after

1const obj2 = { 2 num: 1 3}

obj1.numだと1の値しか取れず、
オブジェクトとしてキーも一緒に欲しいです。

前提・実現したいこと2

 質問を変えます
obj1にobj2のaaaのみをマージしたいです

before

1const obj1 = { 2 num: 1, 3 hoge: ture, 4 hage: false, 5}

after

1const obj2 = { 2 aaa: 1, 3 bbb: 1, 4 ccc: 1, 5}
const test = obj1 = { ...obj1, {aaa: obj2.aaa} }

にすればいいのはわかるのですが、
もう少しobj2からaaaのみフィルターをかけたものをマージする、といったソースにできないですか?
詰め替えではなく。

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

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

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

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

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

Lhankor_Mhy

2021/10/06 03:15

const obj2 = { num: obj1.num } ではダメなのですか?
ms5025

2021/10/06 03:17

そうですね。 { num: 1 } この形欲しいです。 余分なキーを全て排除した形で欲しいです。 他とマージするのにその形がよくて。 値とって形成し直すのはやめたくて。 何か一行でいい感じに行かないものかと・・
yambejp

2021/10/06 03:22

質問が途中で切れているようです
Lhankor_Mhy

2021/10/06 03:38

「余分なキーを全て排除した形」とはどんな形ですか? リテラルで書く、ということでしょうか?
maisumakun

2021/10/06 03:43

> 値とって形成し直すのはやめたくて。 何か一行でいい感じに行かないものかと・・ 値が1つしかないのだから、そのままとっても1行で済むかと思います。
m.ts10806

2021/10/06 03:54

>この形欲しいです。 できてますが、何が違うんでしょう。 前提や背景も欲しいですね。なんのためにそうするのか、何に使うのか。
Lhankor_Mhy

2021/10/06 03:57

もしかして、破壊的操作にしたいということかな……?
ms5025

2021/10/06 05:48

例えばmap等を使ってとか・・・ このnumを二回書く感じじゃないパターンでないでしょうか? そのやり方以外で。
Lhankor_Mhy

2021/10/06 05:51

よくわからないな…… num という文字列がコードに2回現れなければいいのですか?
maisumakun

2021/10/06 05:56 編集

> このnumを二回書く感じじゃないパターンでないでしょうか?そのやり方以外で。 numを一度で済ませていちばんシンプルな書き方としては、const key='num', obj2 = {[key]: obj[key]};のようなものが考えられます。 …というように、「特定のやり方以外」と言われると思いも寄らない回答が寄せられて、役に立たない危険が大いにあります。「何のために」「どのようなやり方」を求めるのかを明確にしてください。
maisumakun

2021/10/06 05:58

> もう少しobj2からaaaのみフィルターをかけたものをマージする、といったソースにできないですか? それは何のために必要なのですか?(出来上がるオブジェクトには何ら影響しません)
ms5025

2021/10/06 05:58

正しく動くものではなく、書き方にこだわるのはそんなにダメなことでしょうか? 自分の質問が悪かったかもしれないので質問編集しました。
ms5025

2021/10/06 06:00

>maisumakun すみません、フィルターしたものをマージするといった感じのソースが書きたいからです 自分ではmaisumakunさんと同じコードしか考えつかなかったので、 もう少しいいコーディングがないか質問したのです
maisumakun

2021/10/06 06:02

> もう少しいいコーディングがないか質問したのです 「固定のキーを1つ」という条件なら、これが最善かと思います。シンプルイズベストです。
maisumakun

2021/10/06 06:04

> 正しく動くものではなく、書き方にこだわるのはそんなにダメなことでしょうか? 「コードが長くなって読みにくくなる」ような、合理性の乏しいコードになってしまうので、特定のコード要素を使うのを禁じられたパズルでもなければこだわる理由が見いだせない、という感覚です。
Lhankor_Mhy

2021/10/06 06:10

質問の編集を拝読。 要は、好みの問題なのですね…… ちなみに、suwmn50799さんのご回答は「aaaのみフィルターをかけたもの」を満たしていそうですが、そちらでダメな理由は何なのですか?
ms5025

2021/10/06 06:26 編集

これがだめとかではなく、他に方法はないのかと思いまして。 自分もそうやりますが、 aaaのオブジェクトをつくり詰め替えるのではなく filterのようなもので出してくることがjavascriptで出来るのであればそれを使いたいと思いました。 常にaaaが固定かも分かりませんし、増えることもあるかもしれません。 (今はないですが、そうなった場合のことを考えて) { aaa: obj2.aaa bbb: obj2.bbb ccc: obj2.ccc } みたいになるのが嫌だっただけです。 keyに[aaa,bbb,ccc]がincludeされてる値だけフィルダーして配列にセット、みたいなことが もし一行でできるなら、そちらで書きたいと思っただけです。 今のaaa固定なら、どちらもかわらないでしょうけど。 個数が増えたら、どうなんでしょうか。
Lhankor_Mhy

2021/10/06 06:29

suwmn50799さんのご回答はフィルタをかけていますよ。読みましたか? ... Object.entries(object).filter( ...
ms5025

2021/10/06 06:42

そうです! 今から返答を書く予定です。 自分の理想としてはこちらの回答です。 詰め替えがなぜだめなのかと聞かれたので先にこちらへ返答となりました
Lhankor_Mhy

2021/10/06 06:45

そうでしたか、ご解決されて何よりです。
guest

回答2

0

単純にこれだと、何が不満でしょうか?

javascript

1const obj1 = { 2 num: 1, 3 hoge: ture, 4 hage: false, 5} 6 7const obj2 = {num: obj1.num};

投稿2021/10/06 03:15

maisumakun

総合スコア145208

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

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

yambejp

2021/10/06 03:25

命題が悪いのですが、tureではなくtrueだと思います
guest

0

ベストアンサー

便利なものに頼って、こんなふう

javascript

1const obj1 = { 2 num: 1, 3 hoge: true, 4 hage: false, 5} 6 7const obj2 = _.pick(obj1, ['num']); 8 9console.log(obj2); // => { num: 1 } 10

に楽することばかり考えてはだめです。とかいいつつ ➡ サンプル。で、この_.pick に相当するものを自分で書こうと思ったときのお手本:

javascript

1function pick(object, keys) { 2 return keys.reduce((obj, key) => { 3 if (object && object.hasOwnProperty(key)) { 4 obj[key] = object[key]; 5 } 6 return obj; 7 }, {}); 8} 9

引用元 ➡ You-Dont-Need-Lodash-Underscore#_pick

使い方 ➡ サンプル2

コンナンモ

マイpickの作り方として、こんなんも。

javascript

1const pick = (object, keys) => Object.fromEntries(Object.entries(object).filter(([key]) => keys.includes(key)));

サンプル3

投稿2021/10/06 03:29

編集2021/10/06 04:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ms5025

2021/10/06 06:43

ありがとうございます!うまくいきました!!助かりました!
退会済みユーザー

退会済みユーザー

2021/10/06 10:33

おめっとうさん!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問