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

JQuery:为每个唯一的数据属性(动态)获取值数组,jquery,arrays,custom-data-attribute,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

我有一个包含日期和值的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>

我想要实现的是为每个唯一的“数据日”值获取一个值数组,因此在上面的示例中,可以按照以下方式进行操作:

dd1 ["value 1","value2"]
dd2 ["value 1"]
dd3 ["value 1","value 2","value3"]
这背后的想法是,我已经知道所有可能的值可能是什么,因此,如果每天都得到每个值的数组,我就可以将其与“allValues”数组进行比较

有人能帮我吗

阿迪内奥提供了以下答案,这是伟大的和完美的作品

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() );
});
。。。然而,我应该在我的原始帖子(我的道歉)中提到的是,我只想在每个数组中存储唯一的值


提前非常感谢

只需稍微更改一下即可

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"
    ]
} 

如果我没有正确安装,以下代码将适用于您

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

我试过类似贝娄的东西

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)
控制台将打印此内容(输出为字符串化)


这种方法的问题在于,它需要创建一个预先存在的对象,其中包含未知数量的键。我同意。非常感谢您的回答,尽管如此,但是唯一的日期,因此唯一的“数据日”属性值的数量是动态的。这太棒了。谢谢有没有办法容纳复制品?即,仅在每个ARAY中存储唯一值?再次非常感谢@FECoder-当然,添加另一个
if
语句以查看该值是否已经存在,如下->
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"]}