jQuery:使用表的所有唯一值创建数组

时间:2014-04-06 15:41:09

标签: jquery arrays push each

有没有一种方法可以使用jQuery / JS创建一个包含表中所有唯一值的数组,即没有重复? 此外,我感兴趣的值仅在具有特定类别(myClass)的TD中+我想排除""和" "作为无效值。

在下面的示例中,输出应为[item1,item2,item3],作为唯一唯一且有效的值。

示例表

<table id="myTable">
    <thead>
        <tr>
            <th class="myHeader">Cat 1</th>
            <th>Vol 1</th>
            <th class="myHeader">Cat 2</th>
            <th>Vol 2</th>
            <th class="myHeader">Cat 3</th>
            <th>Vol 3</th>
            //...
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="myClass">item1</td><td>8</td><td class="myClass">item2</td><td>7</td><td class="myClass">item1</td><td>2</td>
        </tr>
        <tr>
            <td class="myClass">item3</td><td>5</td><td class="myClass">item2</td><td>7</td><td class="myClass">item2</td><td>4</td>
        </tr>
        <tr>
            <td class="myClass">item3</td><td>1</td><td class="myClass">item1</td><td>5</td><td class="myClass">item3</td><td>3</td>
        </tr>
        //...
    </tbody>
</table>

到目前为止我的JS(不包括重复项):

var result = new Array();
$('td').each(function() {
    if( ($(this).text() != '') && ($(this).text() != ' ') {
        result.push(+($(this).text()));
    }
});
alert(result);
提前非常感谢,蒂姆。

3 个答案:

答案 0 :(得分:2)

试试这个

var result = new Array();
$('td').each(function() {
    if( ($(this).text() != '') && ($(this).text() != ' ') {
        if(result.indexOf($(this).text()) == -1){
            result.push(+($(this).text()));
        }
    }
});
alert(result);

答案 1 :(得分:2)

您可以在以下后使用$.unique()

result = $.unique(result);

或事先检查:

if(result.indexOf(this.textContent) == -1){
    //push
}

答案 2 :(得分:0)

你可以这样做:

var result = new Array();

$('#myTable').find('td.myClass').each(function () {
   if (result.indexOf($(this).text()) == -1) {
       result.push($.trim($(this).text()));
   }
});
console.log(result);

Fiddle


使用$.inArray()

var result = [];

$('#myTable').find('td.myClass').each(function () {
   if ($.inArray($(this).text(), result) == -1) {
      result.push($.trim($(this).text()));
   }
});
console.log(result);

With jQuery.inArray()