在javascript中将现有变量添加到数组中

时间:2014-07-31 22:21:34

标签: javascript arrays

我有这个HTML

<div class="calListChip" id="label-bDd1aDFjNnQ2aHFxOTN2cGQyM2JhaXA2cmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ" title="Testkalender1">
<div class="calListChip" id="label-OWFmbmdwbWprbTRxMmFrOTNycGlicmM2bjBAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ" title="Testkalender2">

我已经得到了这段代码,用html div的标题创建变量作为名称然后我将html对象的标签作为参数传递给变量。

var elements = document.body.getElementsByClassName('calListChip');

var view1 = [];

//For each element found
for (var i = 0; i < elements.length; i++) {

    //Variable names cant inlude spaces
    var title = elements[i].title;    
    title = title.replace(/ +/g, "");

    //create the variable
    window[title] = elements[i].id;

    //if 'test' exist in the title, add the variable to an array
    if (elements[i].title.toLowerCase().indexOf("test") >= 0)
    {
        view1.push(window[title]);   
    }
};

但是view1数组不能获得变量引用,而是一个带有标题名称的字符串,我后来无法使用它。

这是我想要的结果

view1 : [Testkalender1, Testkalender2]

这是我得到的结果

view1 : ["Testkalender1", "Testkalender2"]

问题是,我不知道html元素的数量或标题/标签,所以我需要动态创建变量,然后通过标题中的关键字将它们放在正确的数组中

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

目前尚不清楚您希望如何生成所需的结果(例如数据的来源),但我可以帮助解释当前代码的情况。当你这样做时:

window[title] = elements[i].id;

您正在创建一个名为title的全局变量,并为其分配elements[i].id中的字符串值。所以,现在你有一个带有字符串的全局变量。

以后这样做:

view1.push(window[title])

您只是在view1数组中推送该字符串的副本。该字符串与您的全局变量无关。因此,view1最终将成为一个字符串数组。


如果你希望view1最终成为像你的例子一样的对象数组:

view1[0] = {
    name: 'TestKalendrar',
    items: [Testkalender1, Testkalender2]
};

然后,你必须将对象推入数组,而不是字符串。


我应该补充一点,我不知道你用这一行创建了全局变量:

window[title] = elements[i].id;

正在以任何方式帮助您解决问题。它没有必要。


我很乐意帮助您获得不同的结果,但到目前为止,您已展示了所需的对象数组,但未向我们显示您从name获取items属性的位置{{1}}财产。如果您可以编辑问题以显示这些值的来源,我们可以帮助您创建解决方案。

答案 1 :(得分:0)

我重新编写了一些代码,确实创建了变量,请参阅http://jsfiddle.net/smylydon/Q5m6Q/中的小提琴

var elements = document.body.getElementsByClassName(&#39; calListChip&#39;);

var view1 = [];

//找到每个元素 for(var i = 0,length = elements.length; i&lt; length; i ++){

//Variable names cant inlude spaces
var title = elements[i].title;
title = title.replace(/ +/g, "");

//create the variable
window[title] = elements[i].id;

//if 'test' exist in the title, add the variable to an array
if (title.toLowerCase().indexOf("test") >= 0) {
    view1.push(window[title]);
    console.log('variable:', window[title]);
}

};

console.log(&#39; view1:&#39;,view1);