jQuery递归通配符选择器从数组和数组动态推送

时间:2013-06-19 23:57:31

标签: javascript jquery arrays recursion

Link to jsFiddle

我有许多包含文本的元素,其中我使用parseInt()从特定数量的元素(基于当前月份)和特定选择器通配符中获取值,并将这些值推送到六个数组中的一个用于别处。我正在尝试清理代码并制作一个紧凑的循环来完成所有这些。

如果我使用六个单独的for循环,我能够使一切工作正常,但我想我可能会试着看看它是否能够在一个循环中完成。

所以在下面的for循环中,我试图通过尝试{i来使元素ID的jQuery通配符选择器成为statusArray的当前值(来自$('[id*=statusArray[i]])) {1}}但这似乎不起作用。

然后我想通过像statusArray[i]Array.push(...)之类的东西将数据推送到预定义的适当数组中,但这也不起作用。我尝试过以各种方式连接,但似乎无法让它工作。

任何帮助将不胜感激!提前谢谢!

HTML:

<div id="jan_connected"></div>  <!-- left empty to test for NaN -->
<div id="jan_busy">100</div>
<div id="jan_noanswer">100</div>
<div id="jan_abandoned">100</div>
<div id="feb_minutes">100</div>
<div id="feb_totals_calls_c">100</div>
<div id="feb_connected">100</div>
<div id="feb_busy">100</div>
<div id="feb_noanswer">100</div>
<div id="feb_abandoned">100</div>

Javascript:

var connectedArray = [];
var busyArray = [];
var noanswerArray = [];
var abandonedArray = [];
var minutesArray = [];
var callsArray = [];
//    var date = new Date();
//    var dateNumber = 1 + date.getMonth();
var dateNumber = 2;
var statusArray = ['minutes', 'total_calls', 'connected', 'busy', 'noanswer', 'abandoned']

for (i=0; i<dateNumber; i++) {
    // Below I would like the id* to equal the current value of the statusArray iteration
    if (isNaN(parseInt($('[id*=statusArray[i]]').slice(i).html()))) {
        statusArray[i]Array.push("0");   // Trying to push into the appropriate array dynamically
    } else {
        statusArray[i]Array.push(parseInt($('[id*=statusArray[i]]').slice(i).html()));
    }
}

1 个答案:

答案 0 :(得分:1)

您在几个地方都有语法错误 ..

这一行

$('[id*=statusArray[i]]')

应该是

$('[id*=' + statusArray[i] + ']')

并且

 statusArray[i] Array.push("0");

应该是

 statusArray[i].push("0");

推送方法在数组上可用,但statusArray[i]不是数组而是字符串。

看起来你正在寻找像这样的东西

var connectedArray = [];
busyArray = [];
noanswerArray = [];
abandonedArray = [];
minutesArray = [];
callsArray = [];
dateNumber = 2;
statusArray = ['minutes', 'total_calls', 'connected', 'busy', 'noanswer', 'abandoned'];
var obj = {
    'minutes': minutesArray,
        'totals_calls': callsArray,
        'connected': connectedArray,
        'busy': busyArray,
        'noanswer': noanswerArray,
        'abandoned': abandonedArray
};

for (i = 0; i < statusArray.length; i++) {
    $('[id*="' + statusArray[i] + '"]').each(function () {
        var val = $(this).html();
        if (isNaN(parseInt(val))) {
            obj[statusArray[i]].push("0");
        } else {
            obj[statusArray[i]].push(val);
        }
    });
}

    console.log('Minutes Array: ' + obj['minutes']);
    console.log('Total Calls Array: ' + obj['totals_calls']);
    console.log('Connected Array: ' + obj['connected']);
    console.log('No Answer Array: ' + obj['noanswer']);
    console.log('Abandoned Array: ' + obj['abandoned']);
    console.log('Busy Array: ' + obj['busy']);

<强> Check Fiddle