jQuery:如何为数组中的每个项创建变量

时间:2014-04-07 09:51:44

标签: jquery arrays loops each

我正在使用以下代码创建一个数组。

到目前为止单个函数工作正常,我对循环的唯一问题是如何从数组中的每个项动态创建变量(nameX和dataX)。

示例: 我的数组是[item1,item2,item3]。在这种情况下,变量应该是name1,data1,name2,data2,name3,data3(nameX和dataX现在只是占位符)。

我的代码:

//get unique items
var inputSearch = new Array();
$('td.searchTerm').each(function() {
    if( ($(this).text() != '') && ($(this).text() != ' ') ) {
        if(inputSearch.indexOf($(this).text()) == -1) {
            inputSearch.push( $(this).text() );
        }
    }
});

//loop through array to get volumes per item
var i;
for (i = 0; i < inputSearch.length; i++) {
    var nameX = inputSearch[i].replace(/\s+/g, '');
    var dataX = [];
    var xSum = 0;
    $('#myTable tbody tr').each(function() {
        if ($(this).find('td:contains(' + nameX + ')').length === 0) {
            dataX.push(0);
        } else {
            xSum = 0;
            $(this).find('td:contains(' + nameX + ')').each(function() {
                 xSum += parseInt($(this).next('td').text());
            });

            dataX.push(xSum);
        }
    });
}

更新:我找到了一种动态创建名称变量的方法,所以现在只缺少数据变量:

window['name' + i.toString()] = inputSearch[i].replace(/\s+/g, '');

非常感谢你提供任何帮助,蒂姆。

1 个答案:

答案 0 :(得分:1)

正如我在评论中所说,不要试图创建变量变量&#34;。只有痛苦和痛苦才能沿着这条道路前进。

这是一种解决你看起来的方法而不诉诸丑陋黑客的方法。

var searchTerm = {};

$('td.searchTerm').each(function () {
    var term = $.trim( $(this).text() ), 
        name = term.replace(/\s+/g, '_');

    // prevent empty or non-unique entries
    if ( !term || searchTerm.hasOwnProperty(term) ) return;

    // sum up table values for the current term
    searchTerm[term] = 0;
    $('#myTable tbody td:contains(' + name + ')').each(function () {
        searchTerm[term] += parseInt( $(this).next('td').text(), 10 );
    });
});

会给你这样的东西:

searchTerm = {
    "foo": 10,
    "bar": 20,
    "baz": 0
};

考虑适当处理混合案例。目前fooFoo是不同的术语,可能是也可能不是您需要的术语。

extend jQuery with a case-insensitive :contains selector有一种简单的方法。