2014-08-31 41 views
0

我有一個表,每個錶行按唯一日期動態分配數據日屬性。它的輸出類似於以下內容:基於前面的回答Jquery通過數據類型從元素中獲得唯一值(第2部分)

<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. 將每個「值」數組與我的「allAvailableOptions」數組進行比較,如果它們匹配,則返回true。

基礎上),它的反應到目前爲止,我所做出的編輯和使用的toString(似乎工作:

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

雖然這可能不是這樣做的一個很好的方式(我敢肯定有人會指出爲什麼),它似乎是正好充當意,所以我很高興這種方法:

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

所有我現在需要確定的是如何確保我的數組沒有任何重複和如果該值尚不存在,則推送。

,可以提供非常讚賞

乾杯

+0

您正在檢查對象相等,因此這些項目不匹配 – 2014-08-31 12:59:06

+0

在字符串數組上的$ .each'中使用'this'是有問題的。也看看jQuery'$ .inArray()'方法 – charlietfl 2014-08-31 13:02:07

回答

1

沒有任何幫助,等於陣列上不工作的方式,你要比較的對象,在這種情況下是不同的數組對象。

您應該檢查內容。請參閱this answer以獲得明智的實施。

而且,在這種情況下,您的

var $this = $(this); 

使用是因爲它不會被引用完全是多餘的。

+1

啊,是的,道歉。我一直在複製和粘貼其他代碼示例。 – FECoder 2014-08-31 15:10:13

+0

我現在編輯了我的代碼以刪除提到的冗餘代碼,並且使用toString()方法更新,似乎達到了我的要求。謝謝 – FECoder 2014-08-31 15:41:06

相關問題