BETA

ネストしたオブジェクトからキー指定で値を取り出したかった覚書

投稿日:2020-06-18
最終更新:2020-06-18

動機

再帰で脳筋実装しても良いけど、なんとなくreduce使いたかった

やりたかった事

let data = {b: 500, g:{value: 30}, c:[32]}  

こっから

let keys = ["g", "value"]  

配列で探索パスを指定すると

search(data, keys)  
// -> 30  

値が取り出せる。

ゆるふわ実装

function search(data,keys){  
    return keys.reduce((current, key) => {  
        try{  
            return current[key]  
        } catch(e) {  
            return undefined  
        }  
    }, data)  
}  

ぱっと見、クロージャで再帰してるのとそんなに変わらない

テストしてみる

できたっぽいのでテストしてみる

オブジェクトキーで探索

data = {b: 500, g:{value: 30}, c:[32]}  
keys = ["b"];  

search(data, keys);  
// -> 500  

ネストされたオブジェクトを探索

data = {b: 500, g:{value: 30}, c:[32]}  
keys = ["g", "value"]  

search(data, keys)  
// -> 30  

ネストされたオブジェクト/配列を探索

data = {b: 500, g:{value: 30}, c:[32]}  
keys = ["c", 0]  

search(data, keys)  
// -> 32  

キーが存在しなければundefined返す

data = {b: 500, g:{value: 30}, c:[32]}  
keys = ["c", 100]  

search(data, keys)  
// -> undefined  

まとめ

良い感じに動いた。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

okd.shのTechのフリしたポエム

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう