Jquery按数据类型从元素中获取唯一值(第2部分)

时间:2014-08-31 12:48:37

标签: jquery arrays compare array-push

我有一个表,每个表行按唯一日期动态分配一个数据日属性。其输出类似于以下内容:

<table id="pricehistory">
<tr data-day="1">
   <td>Thu 22/08/13 00:00</td>
   <td>value 1</td>
</tr>
<tr data-day="1">
   <td>Thu 22/08/13 00:00</td>
   <td>value 2</td>
</tr>
<tr data-day="1">
   <td>Thu 22/08/13 00:00</td>
   <td>value 3</td>
</tr>
<tr data-day="2">
   <td>Mon 14/01/15 00:00</td>
   <td>value 2</td>
</tr>
<tr data-day="3">
   <td>Tues 15/01/15 00:00</td>
   <td>value 3</td>
</tr>
</table>

根据之前的回答,我使用以下内容为每个具有相关值的唯一数据类型获取数组:

var allAvailableOptions = ["value 1","value 2","value 3"];

var dataAttributes = {};

$("#pricehistory tr").each(function (index, el) {
   if ( ! ($(el).data('day') in dataAttributes) ) dataAttributes[$(el).data('day')] = [];
   dataAttributes[$(el).data('day')].push( $(el).find('td:last').text() );
});

基于我迄今为止所取得的成就,我想要实现的目标如下:

  1. 对于我的每个阵列,只有当它们不存在时才推送项目(导致每个数组中只有唯一值)
  2. 比较我的每个&#34;值&#34;数组到我的&#34; allAvailableOptions&#34;如果匹配则返回true,返回true。
  3. 根据到目前为止的回复,我做了编辑并使用了toString(),这似乎有效:

    $.each(dataAttributes, function (i, v) {
       var thisArray = this.toString();
       if(thisArray == allAvailableOptions){
          alert("match")
       }
       else
       {
          alert("no match")
       }
    });
    

    虽然这可能不是一个很好的方法(我确定有人会指出原因)它似乎完全符合预期,所以我对这种方法很满意:

    http://jsfiddle.net/zqbn983d/8/

    现在我需要确定的是如何确保我的数组没有任何副本,只有在价值不存在时才推送。

    非常感谢能提供的任何帮助

    干杯

1 个答案:

答案 0 :(得分:1)

不,数组上的等号不起作用,你试图比较对象,在这种情况下是不同的数组对象。

你应该检查内容。请参阅this answer以获得明智的实施。

另外,在这种情况下,您使用

var $this = $(this);

完全是多余的,因为它从未被引用过。