#jquery
#jquery
Вопрос:
У меня есть массив, и я пытаюсь проверить, совпадает ли массив в следующем slow с текущим slow в массиве.
Вот моя логика на данный момент:
$("#container").append("<table border='1' id='main-table'></table>");
var strNames = ["dennis", "dennis", "d00d", "sweet"].sort();
var categories = [];
for (var i = 0; i < strNames.length; i ) {
if (strNames[i] == strNames[i 1])
categories[i] = strNames[i];
console.log(categories[i]);
if (categories.length > 1) {
$("#main-table").append("<tr class='main-table-row'><td><div class='expandTableCell' toggle='false'></div></td></tr>");
for (var x = 0; x < categories.length; x )
if (x == 0)
$("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellHeader'>" categories[x] "</div>");
else
$("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellData'>" categories[x] "</div>");
} else
$("#main-table").append("<tr class='main-table-row'><td>" strNames[i] "</tr>");
}
Мне это нужно, чтобы проверить следующий индекс массива и, если у него такое же имя, сохранить его в категории, которая заканчивается построением дерева. Если вам нужно больше информации, я могу попытаться предоставить больше.
Комментарии:
1. С какой частью вам нужна помощь?
2. Ах да, этот вопрос было довольно сложно задать, мне нужна помощь с сохранением правильных значений в массиве categories.
3. Вы пытаетесь сохранить только дубликаты? Или просто совпадает ли текущий элемент со следующим?
4. нет, он берет дубликаты и помещает их в категорию, таким образом, он динамически создает таблицу, каждый td содержит div с категорией внутри нее, поэтому, если вы видите «dennis», «dennis», это создаст категорию с именем «dennis», и под этой категорией вы увидите дочерний элемент «dennis»
5. одна из проблем, которую я вижу, заключается в том, что в вашем
categories[]
массиве индексы расположены не по порядку, поэтому, когда вы нажимаете на него своимx < categories.length
циклом, он генерирует многоundefined
значений.
Ответ №1:
Мне пришлось немного изменить вашу логику, но вот, пожалуйста:
$("#container").append("<table border='1' id='main-table'></table>");
var strNames = ["dennis", "dennis", "d00d", "sweet"].sort();
var categories = [];
for (var i = 0; i < strNames.length; i ) {
var name = strNames[i];
if (typeof(categories[name]) == 'undefined') categories[name] = 1;
else categories[name] = 1;
}
for (var name in categories) {
var val = categories[name];
if (val > 1) {
$("#main-table").append("<tr class='main-table-row'><td><div class='expandTableCell' toggle='false'></div></td></tr>");
for (var x = 0; x < val; x )
if (x == 0) $("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellHeader'>" name "</div>");
else $("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellData'>" name "</div>");
} else $("#main-table").append("<tr class='main-table-row'><td>" name "</tr>");
}
Комментарии:
1. Большое вам спасибо! Мне было трудно объяснить, как я хотел, чтобы это работало, и вы ударили меня по голове 🙂
Ответ №2:
Я считаю, что
if (strNames [i] == strNames[i 1]) categories[i] = strNames[i];
произойдет сбой, когда я укажу на последний элемент массива ‘strNames’. Будет выдано исключение, поскольку i 1 будет указывать на выход из массива.
В противном случае я не вижу никаких проблем с этим «если». Чтобы избежать этой ошибки, вам нужно сделать цикл for чем-то вроде
for (var i = 0; i < strNames.length-1; i )
Я также вижу другую проблему в сравнении ‘if’ if (categories.length > 1)
Разве это не обязательно должно быть if (categories.length >= 1)
? Если вы оставите все как есть, то, когда длина категорий равна 1, блок не вводится.
Комментарии:
1. Для него установлено значение> 1, потому что, если в категории есть только один элемент, просто выведите его, если больше, добавьте класс и тому подобное, чтобы расширять и сокращать категории.
Ответ №3:
Кроме выполнения этого:
if (i 1 < strNames.length
i 1 < categories.length
amp;amp; categories[i] == strNames[i 1])
Вы должны быть в пути