Как я мог бы проверить, совпадает ли имя следующего элемента в массиве с текущим элементом

#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])
  

Вы должны быть в пути