使用变量引用对象属性?

时间:2014-12-17 10:14:07

标签: javascript json

我有一个带有一堆关键字和值的对象:(为了便于阅读,我将其缩小为一个值)

var linksarray = {
getting_Started : "Getting Started"
};

目的是在我的页面上浏览一堆链接,操纵href属性并依赖于最终结果,即getting_Started,使用它作为获取值的关键'入门'从对象。

要想象:

以下是代码,操纵值的注释:

var link = jQuery(this).attr('href');       //link = ../getting_Started.htm

var res = link.split('/'); 
var lastEl = res.pop();                     //link = getting_Started.htm

var testEl = firstEl.split('.'); 
var testElUse = testEl[0];                  //link = getting_Started

testElUse = '\'' + testElUse + '\'';        //link = 'getting_Started'

这一切都正常,我得到了正确的字符串。

从这里开始,我使用了很多不同的解决方案,这些解决方案都是我在Google上找到的,但都没有。我已经浪费了一天半的时间。这是我期望工作的两个解决方案......但不要。

解决方案1:

var stringJson = JSON.stringify(linksarray);

var obj=JSON.parse(stringJson) ;
alert(obj[testElUse]);                 //this results in 'undefined'

解决方案2:

alert(linksarray[testElUse]);          //this results in 'undefined'

我知道有点和块注释,但据我所知,如果你想根据这个链接动态引用一个属性,就可以使用块:Dynamically access object property using variable

无论我做什么,我都会得到不确定的回复......而不是"入门"我正在寻找。

请帮助:)

4 个答案:

答案 0 :(得分:1)

首先,使用regExp从您正在寻找的href属性中提取变量可能会更容易和更简洁。为您节省大量的弹出和切片(: http://www.regexr.com/是调整和测试regExp的好网站。 使用regExp它看起来像这样:

var link = $('a');
var href = link.attr('href');

console.log(href); // http:www.google.com/getting_started.html

// .*/           - captures everything up to the last '/'
// (.*)          - captures everything in between the previous selection and 
//                 the next and puts in into a group.
// \.(html|htm)  - captures .html or .htm
var regExp = /.*\/(.*)\.(html|htm)/g;    

// replace the entire url with the value found in the first group selection.    
var testElUse = href.replace(regExp, '$1');

console.log(testElUse); // getting_started

然后,您应该能够使用括号表示法从Object中提取值:

// retrieve the value from the linksArray
console.log( linksArray[testElUse] ); // Getting started

确保名称匹配(:希望这会有所帮助。

答案 1 :(得分:0)

原因似乎是'getting_Started' !== 'getting_started'您在“已启动”中使用大写S定义了links_array属性。

有时它只是让我们感到困惑的小事。 :)

答案 2 :(得分:0)

这是因为变量和属性不同。

该属性为getting_StartedtestElUse = "\getting_started\";

这就是未定义的原因

答案 3 :(得分:0)

删除这部分解析代码

testElUse = '\'' + testElUse + '\'';

额外的撇号意味着您正在寻找名为'getting_Started'的属性,而不是getting_Started(这是2个不同的字符串)。

请参阅此fiddle

相关问题