Вместо использования array
для rowValues
лучше использовать object
, чтобы вы могли проверить наличие значения key
.
Вы также можете использовать array
цветов, откуда вы получаете динамические цвета, и постоянно сдвигать array
, когда бы вы ни нашли новое значение, чтобы у каждого отдельного значения был свой соответствующий отдельный цвет.
И нет необходимости проверять count
в блоке else
, потому что всякий раз, когда вы достигаете этого блока, это означает, что этот value
уже существует в array
.
Вот как должен быть ваш код:
$(function() {
var tableRows = $("#sortable tbody tr"); //find all the rows
var colors = ["red", "blue", "green", "yellow", "#f5b"];
var rowValues = {};
tableRows.each(function() {
var rowValue = $(this).find(".content").html();
if (!rowValues[rowValue]) {
var rowComposite = new Object();
rowComposite.count = 1;
rowComposite.row = this;
rowValues[rowValue] = rowComposite;
} else {
var rowComposite = rowValues[rowValue];
if (!rowComposite.color) {
rowComposite.color = colors.shift();
}
rowComposite.count++;
$(this).css('backgroundColor', rowComposite.color);
$(rowComposite.row).css('backgroundColor', rowComposite.color);
}
});
});
Демо:
$(function() {
var tableRows = $("#sortable tbody tr"); //find all the rows
var colors = ["red", "blue", "green", "yellow", "#f5b"];
var rowValues = {};
tableRows.each(function() {
var rowValue = $(this).find(".content").html();
if (!rowValues[rowValue]) {
var rowComposite = new Object();
rowComposite.count = 1;
rowComposite.row = this;
rowComposite.color = colors.shift();
rowValues[rowValue] = rowComposite;
} else {
var rowComposite = rowValues[rowValue];
rowComposite.count++;
$(this).css('backgroundColor', rowComposite.color);
$(rowComposite.row).css('backgroundColor', rowComposite.color);
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="sortable">
<tbody>
<tr>
<td class="content">A</td>
</tr>
<tr>
<td class="content">B</td>
</tr>
<tr>
<td class="content">A</td>
</tr>
<tr>
<td class="content">C</td>
</tr>
<tr>
<td class="content">C</td>
</tr>
</tbody>
</table>