我正在使用以下代码创建一个数组。
到目前为止单个函数工作正常,我对循环的唯一问题是如何从数组中的每个项动态创建变量(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, '');
非常感谢你提供任何帮助,蒂姆。
答案 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
};
考虑适当处理混合案例。目前foo
和Foo
是不同的术语,可能是也可能不是您需要的术语。
extend jQuery with a case-insensitive :contains
selector有一种简单的方法。