JQuery:为每个唯一数据属性(动态)获取值数组

时间:2014-08-31 09:43:39

标签: jquery arrays custom-data-attribute

我有一个包含日期和值的HTML表格。该表是在加载时生成的数据库,因此既可以是唯一日期的数量,也可以是唯一数据日数"属性值是动态的。

<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="2">
   <td>Sun 13/01/15 00:00</td>
   <td>value 1</td>
</tr>
<tr data-day="3">
   <td>Mon 14/01/15 00:00</td>
   <td>value 1</td>
</tr>
<tr data-day="3">
   <td>Mon 14/01/15 00:00</td>
   <td>value 2</td>
</tr>
<tr data-day="3">
   <td>Mon 14/01/15 00:00</td>
   <td>value 3</td>
</tr>
</table>

我已经有一个数组用于每个唯一的数据日值。

var dataAttributes = {};

$("#pricehistory tbody tr").each(function () {
   dataAttributes[$(this).attr('data-day')] = true; 
});

var uniqueDataAttributes = new Array();

for(var i in dataAttributes)
{
   uniqueDataAttributes.push(i);
}

$.each(uniqueDataAttributes, function (i, v) {
   alert(v);
});

http://jsfiddle.net/nB3ru/7/

我想要实现的是为每个独特的&#34;数据日&#34;获取一系列值。值,所以在上面的例子中的内容如下:

dd1 ["value 1","value2"]
dd2 ["value 1"]
dd3 ["value 1","value 2","value3"]

这背后的想法是我已经知道所有可能的值是什么,所以每天得到每个值的数组我可以将它与&#34; allValues&#34;阵列。

有人可以帮我解决这个问题吗?

Adeneo提供了以下答案,这个答案很棒且完美无缺......

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() );
});

...但是我在原帖(我的道歉)中应该提到的是,我只想在每个数组中存储唯一值。

非常感谢

3 个答案:

答案 0 :(得分:0)

稍微改变一下

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": [
        "value 1",
        "value 2"
    ],
    "2": [
        "value 1"
    ],
    "3": [
        "value 1",
        "value 2",
        "value 3"
    ]
} 

FIDDLE

答案 1 :(得分:0)

如果我理解正确,以下代码将对您有用。

var dataAttributes = {};

$("#pricehistory tbody tr").each(function () {
   var $elem = $(this);
   var dd = $elem.attr('data-day');

   // Initializing the unique dd if not already initialized
   dataAttributes[dd] = dataAttributes[dd] || []; 

   // Push the new value to the unique dd array
   dataAttributes[dd].push($elem.find('td:last').text());
});

答案 2 :(得分:0)

我试过像贝洛一样的东西

var object = {dd1:[],dd2:[],dd3:[]}

$.each(uniqueDataAttributes, function (i, v) {
    $('tr[data-day="'+v+'"]').each(function(){
        object["dd"+v].push($(this).children().eq(1).text());
    });
});

console.log(object)

控制台将打印此内容(输出已字符串化)

{"dd1":["value 1","value 2"],"dd2":["value 1"],"dd3":["value 1","value 2","value 3"]} 

DEMO