文字列パスを使用して、JavaScript オブジェクトと配列のネストされた構造をトラバースします
P粉897881626
2023-08-15 21:01:19
<p>次のようなデータ構造があります:</p>
<pre class="brush:php;toolbar:false;">var someObject = {
'パート1' : {
'名前': 'パート 1',
'サイズ': '20'、
「数量」:「50」
}、
'パート2' : {
'名前': 'パート 2',
'サイズ': '15'、
「数量」:「60」
}、
'パート3' : [
{
'名前': 'パート 3A',
'サイズ': '10'、
「数量」:「20」
}、{
'名前': 'パート 3B',
'サイズ': '5'、
「数量」:「20」
}、{
'名前': 'パート 3C',
'サイズ': '7.5'、
「数量」:「20」
}
]
};</pre>
<p>次の変数を使用してデータにアクセスしたいと考えています: </p>
<pre class="brush:php;toolbar:false;">var part1name = "part1.name";
var part2quantity = "part2.qty";
var part3name1 = "part3[0].name";</pre>
<p>part1name には、<code>someObject.part1.name</code> の値 (「Part 1」) を入力する必要があります。同じことがpart2quantityにも当てはまり、60にパディングされます。 </p>
<p>純粋な JavaScript または JQuery を使用してこれを実現する方法はありますか? </p>
これは、
を参照してください。_.get(obj, property)
を使用する lodash 経由でサポートされるようになりました。 https://lodash.com/docs#getドキュメントの例:
リーリーすでに持っていた同様のコードに基づいてこれを作成しましたが、うまく機能するようです:
リーリー ###使用法:### リーリー http://jsfiddle.net/alnitak/hEsys/で実際の例をご覧ください。
EDIT左端のインデックスがオブジェクト内の適切にネストされたエントリに対応しない文字列が渡されると、このコードがエラーをスローすることに気づいた人もいます。これは当然の懸念ですが、呼び出されたときにこの関数が黙って unknown を返すよりも、
try/catch
ブロックを使用して処理するほうが適切だと思います。