JQuery:为每个唯一的数据属性(动态)获取值数组
我有一个包含日期和值的HTML表。该表是在加载时生成的,因此唯一日期的数量以及唯一“数据日”属性值的数量都是动态的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
<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"]}