Нажмите кнопку, чтобы создать элемент SELECT и OPTION

Это рабочее решение Java. Если у вас есть какие-либо предложения по коду, сообщите мне о моем Gist .

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class FB {

    public static int comparator(String s1, String s2) {

        String[] pt1 = s1.split("((?<=[a-z])(?=[0-9]))|((?<=[0-9])(?=[a-z]))"); 
        String[] pt2 = s2.split("((?<=[a-z])(?=[0-9]))|((?<=[0-9])(?=[a-z]))"); 
//pt1 and pt2 arrays will have the string split in alphabets and numbers

        int i=0;
        if(Arrays.equals(pt1, pt2))
            return 0;
        else{
            for(i=0;i0)
                            return 1;
                        else
                            return -1;
                    }
                    else {
                        int nu1 = Integer.parseInt(pt1[i]);
                        int nu2 = Integer.parseInt(pt2[i]);
                        if(nu1>nu2)
                            return 1;
                        else
                            return -1;
                    }
                }
        }

        if(pt1.length>i)
            return 1;
        else
            return -1;
    }

    private static Boolean isNumber(String n1, String n2) {
        // TODO Auto-generated method stub
        try {
            int nu1 = Integer.parseInt(n1);
            int nu2 = Integer.parseInt(n2);
            return true;
        }
        catch(Exception x) {
            return false;
        }

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String[] examples = {"1some", "2some", "20some", "21some", "3some", "some", "1abc", "abc"};
        List values = new ArrayList(Arrays.asList(examples));

        System.out.println(values);
        Comparator com = (o1,o2) -> {return comparator(o1,o2);}; //lambda expression

        Collections.sort(values,com);
        System.out.println(values);
    }
}

Вывод:

[1some, 2some, 20some, 21some, 3some, some, 1abc, abc]
[1abc, 1some, 2some, 3some, 20some, 21some, abc, some]

1
задан Razär 13 July 2018 в 15:15
поделиться

4 ответа

Вы можете использовать цикл for для итерации массива значений параметров и добавления их к выпадающему списку так:

//Example array of values for adding to drop down
const myArray = [ "Dog", "Cat", "Bird" ];

//Iterate your array of values
for(let x = 0; x < myArray.length; x++){
    let z = document.createElement("option");
    z.setAttribute("value", myArray[x]); //Add value of the current item from array
    let t = document.createTextNode(myArray[x]); //Add text of the current item from array
    z.appendChild(t);
    document.getElementById("mySelect").appendChild(z);
}
0
ответ дан Ryan Wilson 17 August 2018 в 12:32
поделиться
  • 1
    Это именно то, что я искал! Будучи новым в мире javascript, я очень ценю комментарии в коде, спасибо! – Nicholas Spoutz 13 July 2018 в 15:21
  • 2
    @NicholasSpoutz. Добро пожаловать. Если вы удовлетворены моим ответом, вы можете продемонстрировать свою оценку с помощью upvote или пометить его как принятый ответ. :) – Ryan Wilson 13 July 2018 в 15:37
  • 3
    Хотелось бы, чтобы я мог, но так как я новый пользователь, я получаю это всплывающее окно, когда я пытаюсь поднять вас, и «Спасибо за отзывы! Голоса, сделанные теми, у кого меньше 15 репутации, записываются, но не изменяют публично отображаемый результат сообщения. & Quot; – Nicholas Spoutz 16 July 2018 в 13:22
  • 4
    @NicholasSpoutz Нет проблем. Спасибо за принятый ответ. – Ryan Wilson 16 July 2018 в 13:36
<p>Click the button to create a SELECT and an OPTION element.</p>

<button onclick="myFunction()">Try it</button>

<script>
    function myFunction() {
        var ele = document.createElement("SELECT");
        ele.setAttribute("id", "mySelect");  
        document.body.appendChild(ele);

        var values=["option0","option1","option2","option3"];
        // foreach the  values array 
        for(i in values){
            // i is  the index of values;
            // create option  item
            var item = document.createElement("option");
            item.setAttribute("value", values[i]);
            item.innerText=values[i]; 
            ele.appendChild(item); 
        } 

    }
</script>
-1
ответ дан Eric Zeng 17 August 2018 в 12:32
поделиться
  • 1
    Код без каких-либо объяснений относительно того, что вы сделали или почему имеет ограниченную полезность. Посмотрите похожие ответы в тегах, которые вас интересуют для ожидаемого ответа. – Jamiec 13 July 2018 в 15:31
  • 2
    Я думаю, что это так просто, поэтому я не писал объяснений. – Eric Zeng 13 July 2018 в 16:55

В примере используются имена переменных с одной буквой, если бы они использовали более значимые (например, newOption вместо z), вы бы, вероятно, сработали - просто повторите этот бит кода, который генерирует только новый возможно, внутри цикла.

function createSelect() {
  var select = document.createElement("SELECT");
  select.setAttribute("id", "mySelect");
  document.body.appendChild(select);

  var items = ["Foo","Bar","Zoo"];
  for(var i = 0;i<items.length;i++) {
    var item = items[i];
    var newOption = document.createElement("option");
    newOption.setAttribute("value", item);
    var textNode = document.createTextNode(item);
    newOption.appendChild(textNode);
    select.appendChild(newOption);
  }
}
<p>Click the button to create a SELECT and an OPTION element.</p>

<button onclick="createSelect()">Try it</button>

Совет - используйте mdn вместо w3schools , лучшую документацию и примеры.

1
ответ дан Jamiec 17 August 2018 в 12:32
поделиться
  • 1
    Сделан совет. Мне кажется, что W3 был приятным со вступительной точки зрения, но, похоже, с точки зрения объяснения. Спасибо за помощь! – Nicholas Spoutz 13 July 2018 в 15:23
  • 2
    Я думаю, что этот подход медленнее, чем мой – Marco Salerno 13 July 2018 в 15:26
  • 3
    Да, @MarcoSalerno, без сомнения, ваша доля на микросекунду быстрее - но вопрос был не в скорости (и преждевременной оптимизации), а о реализации. И этот ответ стремился максимально приблизить код как можно ближе к OP (используя значимые имена переменных), чтобы не путать. – Jamiec 13 July 2018 в 15:28

Я предпочитаю этот подход, он чище для меня ^^

function createSelect() {
  var select = document.createElement("select");
  document.body.appendChild(select);

  var items = ["pizza","margherita","buona"];
  
  items.forEach(function(item) {
    var option = document.createElement("option");
    option.text = item;
    select.add(option);
  });
}
<button onclick="createSelect()">CREATE SELECT</button>

0
ответ дан Marco Salerno 17 August 2018 в 12:32
поделиться
  • 1
    Вы можете улучшить это, объяснив, что почему вы предпочитаете этот подход и что он улучшает. Кроме того, если вы переходите на скорость, вызов метода forEach во много раз медленнее, чем петля ванили for. – Jamiec 13 July 2018 в 15:30
Другие вопросы по тегам:

Похожие вопросы: