2016-07-20 7 views
2

これまでに何度も尋ねられてきましたが、私はそれを把握していません。以下では Javascript/Jquery - 変数に基づいて変数名を設定する方法

...

var variableName = "hello"; 

どのように私は別の変数に基づいて、変数名「variableNameに」を作るのですか?

PHP例

$a = 'hello'; 
$$a = 'hi'; // same as $hello.. 
echo $hello; // and $hello outputs 'hi' 

私は具体的には、私はとの問題を抱えている構文かもしれようのlocalStorageに使用するには、この変数の変数を必要としています。私はローカルストレージに情報を格納するためのユニークな変数名を生成したい私はのためにそれを使用しています何


(あなたはprobbalyこれはを動作するようですにスキップすることができます)


。変数名は、私がPHPで取得するwordpress投稿/ページの投稿IDに基づいています。

例えば、我々はポストIDは、私はだから今、私はid3333

var postIdNumber = 'id3333'; 
を持っている各ポストID

の先頭に手紙をIDを追加

であると言うだろうが

次に、この記事についてローカルストレージに保存する3つの情報を取得します(簡単にするために出力例ではなく、それを得るためのコード)

var postURL = 'website.comm/a-wp-post/'; 
var postTitle = 'A Wordpress Post'; 
var postThumb = 'website.comm/images/thumb3333.jpg'; 

は、今私は、ローカルストレージ正常に動作

var lsTest = { 'lsURL': postURL, 'lsTitle': postTitle, 'lsThumb': postThumb }; 
localStorage.setItem('lsTest', JSON.stringify(lsTest)); 

にこの情報を保存したいを示しまし。それ以外は、複数の投稿をローカルのストレージに保存して、後で「お気に入りの投稿」ページから取得できるようにしたいとします。

私は動的変数名が必要です。ポストID 3333の場合

  • 私は変数が現在lsTestは私がlsTestid4444
命名する現在という名前の変数を必要とするポストID 4444の場合id3333
  • 名前を付けるという名前の必要があります

    これは動作するようです(完全にはわかりませんが) 解決方法mこれはいませんが、PHPで

    var variableVariable = {} // also, should this have a ';' ? 
    variableVariable.postNumber = 'id3333'; 
    var vv = 'postNumber'; 
    var variableVariable[vv] = { 'lsURL': postURL, 'lsTitle': postTitle, 'lsThumb': postThumb }; 
    localStorage.setItem('variableVariable[vv]', JSON.stringify(variableVariable[vv])); 
    

    は..私は多分このような何かを行うことができます。.. https://stackoverflow.com/a/5187652/3377049

    var variableVariable = {} 
    variableVariable.postNumber = 'id3333'; 
    var vv = 'postNumber'; 
    jQuery('.test-div').text(variableVariable[vv]); // outputs id3333 
    

    からodified(例のために、私はJSにPHPの変数をミキシングよ)

    $uv = 'id3333'; 
    $$uv = { 'lsURL': postURL, 'lsTitle': postTitle, 'lsThumb': postThumb }; 
    localStorage.setItem('$$uv', JSON.stringify($$uv)); 
    
  • +0

    変数の変数に関する詳細はhttps://stackoverflow.com/questions/3723199/をご覧ください。また変数名の組み合わせについてはhttps://stackoverflow.com/questions/25202945/ –

    答えて

    1

    PHPでも可変変数は良い考えではありません。配列またはハッシュ(オブジェクトですが、ハッシュまたはマップとして使用します。ここでは、プロパティまたはエントリを追加したり削除したりできます)。

    var posts = {}; 
    var someId = 3333; //or '3333' if it isn't a number 
    
    posts[someId] = { 
        URL: postURL, 
        title: postTitle, 
        thumb: postThumb 
    }; 
    
    localStorage.setItem('post' + someId, JSON.stringify(posts[someId])); 
    

    "バー" という名前のオブジェクトの "foo" という名前のプロパティはそうのようにアクセスすることができます。

    bar.foo = 'baz'; 
    console.log(bar.foo); 
    

    かそこらのように:と同じである

    bar['foo'] = 'baz'; 
    console.log(bar['foo']); 
    

    var name = 'foo'; 
    bar[name] = 'baz'; 
    console.log(bar[name]); 
    

    最後に、JavaScripのグローバルオブジェクトt(ブラウザではwindow)は、グローバル変数を「保持」します。

    var myGlobal = 10; 
    console.log(window.myGlobal); // logs 10 
    var globalName = 'foo'; 
    window[globalName] = 'baz'; 
    console.log(foo); //logs 'baz' 
    

    一般的にグローバル変数を使用することはお勧めしません。それらを使ってvarの名前がidである投稿を保存することは非常に非正統的であり、多くのJS開発者はそれを単に間違っていると考えます。

    +0

    ありがとう、私はすぐにこれを働かせることができたと私はPHP変数変数を理解する方法を理解しています。 –

    2

    オブジェクトのオブジェクトを作成する必要があります。オブジェクトのオブジェクトは、ユニークな投稿IDを使用して作成する必要があります。しかし、その後、あなたは文字列化にそれを格納する前にオブジェクト、およびパースそれを、それを取得する必要があります。

     function saveObject(key, object) { 
          object = JSON.stringify(object); 
          window.localStorage.setItem(key, object); 
         } 
         function getSavedObject(key) { 
          var saved = window.localStorage.getItem(key); 
    
          if (saved) { 
           return JSON.parse(saved); 
          } else { 
           return null; 
          } 
         } 
    

    あなたのオブジェクト:

    var lsTest = { 
        id3333: { 
         postUrl: postUrl1, 
         postTitle: postTitle1, 
         postThumb: postThumb1, 
        }, 
        id4444: { 
         postUrl: postUrl2, 
         postTitle: postTitle2, 
         postThumb: postThumb2, 
        } 
    } 
    

    店舗それ:

    saveObject('myUniqueSiteName', lsTest); 
    

    それを取得:

    :新しい投稿を追加する

    var lsTest = getSavedObject('myUniqueSiteName'); 
    

    var lsTest = getSavedObject('myUniqueSiteName'); 
    var postId = 'id555'; 
    lsTest[postId] = { 
        postUrl: postUrl3, 
        postTitle: postTitle3, 
        postThumb: postThumb3, 
    } 
    saveObject('myUniqueSiteName', lsTest); 
    
    +0

    詳細な回答はありがとうございます。ローカルのストレージテストスクリプトに適用したので、コードを修正して学習しました。 –

    関連する問題