2016-05-06 12 views
0

hiiiiアプリケーションの作成 オブジェクトプロパティへのアクセスのためのURLからのパスを取得します。パスはstringで、変数に保存します。 このコードの意味は、例えば:文字列変数からオブジェクトプロパティへのアクセス方法

しかし、間違っているとエラーをスローする...任意の体は私を助けることができますか? 誰かが私を助けたら本当に感謝します。いくつかの問題がここにあります

var path_array = path.split('.'); 
var item = object; 
for (int i = 0; i < path_array.length; i++) { 
    item = item[path_array[i]]; 
} 
+0

投稿されたコードはエラーにはなりませんが、 'object.path'は' undefined'になります。 –

+0

http://eloquentjavascript.net/04_data.htmlと[Access/process(Nested)オブジェクト、配列、またはJSON](http://stackoverflow.com/q/11922383/218196)を参照することをお勧めします。 JavaScriptでオブジェクトがどのように機能するかをよりよく理解できます。 –

答えて

1

はこれを試してみてください。

まず、オブジェクトのプロパティは文字列ですが、そのようなネストされた構造にアクセスするためにドット区切りのパスを使用するだけではありません。少なくともネイティブではない。しかし、これのための図書館があります。たとえば、私はdangitの作成者です。この作業には、namespace()という機能があります。

var item = dangit.namespace(object, 'music.test.test2'); 

第二には、JavaScriptがそのようなパス表記をサポートしていても、それはおそらく、このように動作します。

object.pathobject[path]は非常に異なるものであり、重要な違いがあるためです
var path = 'music.test.test2'; 
var item = object[path]; 

path変数を持っていてもpathというプロパティを要求しているので、object.pathはそれを使用しません。一方object[path]path変数の値が何であれプロパティを取得します。

第3に、object.music.test.test2は、提供したデータ構造に存在しません。これについてはconsole.log()を参照してください。あなたの例では

console.log('music:', object.music); 
console.log('music.test:', object.music.test); 

object.music.testStringです。また、文字列にはtest2という名前のプロパティがないため、アクセスしようとするとundefinedが返されます。

2

:ありがとう:)

var object = { 
    music:{ 
     test:"", 
     test2:"" 
    }, 
    video:{ 
     test:"", 
     test2:"" 
    }, 
    pic:{ 
     test:"", 
     test2:"" 
    }, 
    photosUsers:{ 
     test:"", 
     test2:"" 
    } 
} 

var path = "music.test.test2"; 
var item = object.path 
+0

なぜこのためのライブラリが必要ですか? 4行のコードを取る何かのためにライブラリを使うのは、私たちがpadLeft debacleを持っていた理由です – amiller27

+0

私の 'namespace()'関数はあなたが想像している以上に多くのことを行います。また、実際のアプリケーションでは多くのユーティリティが必要なので、ライブラリだけをインポートするのではなく、他の関数もインポートすることがよくあります。これが何とかあなたが必要とする唯一のユーティリティであれば、おそらくライブラリを使うのは意味がありません。常識を使います。 「左パッド」に関しては、私は一般的に(sindresorhusと共に)(https://github.com/sindresorhus/ama/issues/367)です。そこには多くの問題があり、モジュールの複雑さはそれらのどれにも影響しません。依存関係をどのように信頼するか、それを内部に保持する方法を解説します。 –

+0

申し訳ありませんが私は明確でない場合。私は、あなたの 'namespace'関数が大したことをしていると思います。私はそれがそうでないことを暗示しようとしていませんでした。私はsindresorhusが言ったことの多くに同意します。しかし、この特定のケースでは、あなたのライブラリの残りの部分も 'namespace'の完全な機能も必要ないと思います。 – amiller27

0
var object = {music : {test : "" , test2 : ""},video : {test : "" , test2 : ""},pic: {test : "" , test2 : ""},photosUsers: {test : "" , test2 : ""}} 

//Associate the path variable to the object 
object.path = "music.test.test2"; 
var item = object.path; 
関連する問題