Javascript / Jquery - 如何根据变量设置变量名称

时间:2016-07-20 23:16:07

标签: javascript php jquery wordpress

以前曾经多次询问过这个问题,但我并没有抓住它。

以下..

var variableName = "hello";

如何制作变量名称' variableName'基于另一个变量?

PHP示例

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

我特别需要将此变量变量用于localstorage,因此它可能是我遇到问题的语法。

我用它做什么(你可以探讨这似乎工作

我想生成一个唯一的变量名,用于在本地存储中存储信息。变量名将基于wordpress post / page的post id,我用php检索。

例如,我们会说帖子ID是 3333

我将字母 id 添加到每个帖子ID的开头

所以现在我有 id3333

var postIdNumber = 'id3333';

然后我得到了另外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 的变量命名为 id3333
  • 对于帖子ID 4444,我需要将当前名为 lsTest 的变量命名为 id4444

这似乎有用(虽然我不完全理解它) 从https://stackoverflow.com/a/5187652/3377049

修改的解决方案
var variableVariable = {}
variableVariable.postNumber = 'id3333';
var vv = 'postNumber';
jQuery('.test-div').text(variableVariable[vv]); // outputs id3333

虽然这不是..

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]));

在PHP中我可能会做这样的事情......(例如我将PHP变量混合到JS中)

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

2 个答案:

答案 0 :(得分:2)

您只需要创建一个对象对象,键入唯一的帖子ID。但是,在存储对象之前,您需要 stringify ,并在检索对象时 解析

        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);

答案 1 :(得分: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]));

名为“bar”的对象上名为“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]);

最后,JavaScript中的全局对象(在浏览器中为window)“包含”全局变量。

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

不鼓励使用全局变量。使用它们来存储var的名称是id的帖子是非常不正统的,许多JS开发人员会认为这是错误的。