2014-08-31 3 views
0

У меня есть следующий код, который получает значение ячеек таблицы в массивы на основе типа данных применяются к строке таблицы:JQuery уникального массив значений

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

это вообще возможно модифицировать этот код так, что только сохранены уникальные значения? Я бы предпочел настроить выше, а не рассматривать альтернативные решения или дополнительные библиотеки, поскольку для этого может потребоваться переработка уже функционирующего кода.

У меня был хороший всплывающий раунд, но я не могу найти ничего, что использует вышеупомянутый тип решения.

Спасибо за любые предложения, которые вы можете мне предложить.

+0

Попробуйте функцию jQuery $ .unique – Taleeb

ответ

1

Во-первых, переменные и возвращается строка сделает ваш код намного более читабельным:

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

Теперь вы можете использовать indexOf, чтобы проверить, если значение еще не вставили:

$("#pricehistory tr").each(function (index, el) { 
    var day = $(el).data('day'); 
    var value = $(el).find('td:last').text(); 
    if (! (day in dataAttributes)) 
     dataAttributes[day] = []; 
    if (dataAttributes[day].indexOf(value) < 0) //< 0 means not found 
     dataAttributes[day].push(value); 
}); 

(И вы можете использовать polyfill, если вы хотите совместимость с IE8)

+0

Спасибо, это именно то, что я был после! – FECoder