按字母顺序添加下拉列表选项

时间:2018-01-30 17:30:18

标签: javascript jquery arrays object

我正在构建一个接收包含对象的数组的函数。我需要按字母顺序从数组中的对象填充一个包含一些值的列表。

这是我迄今为止所做的尝试:

var options = $("#forms-stage");

var formsTest = [
    {
        name: "Here's a Form",
        category: ["cat1"]
    },
    {
        name: "Sample Form",
        category: ["cat2"]
    },
    {
        name: "zzAnother Form",
        category: ["cat1","cat2"]
    },
];

function allForms(obj) {
    options.empty();
    $.each(obj, function(index, val){

        var add = val.name

        if(options.children().length === 0) {
            options.append("<option>" + val.name + "</option>");
        } else {
            for(i=0; i < obj.length; i++) {
                if(add > options.children()[i]) {
                    options.append("<option>" + val.name + "</option>");
                }
            }
        }
    })
 };

当我使用它时,我得到一个包含&#34的列表;这里是一个表格&#34;然后三次迭代&#34; zzAnother Form&#34;。我认为问题是因为循环遍历每个位置,附加选项会导致问题。

我已经查看了其他解决方案herehere,但它们似乎都不适用于我在这里的对象数组。

这两种解决方案都使用$(this)。但是,简单地测试console.log($(this).name)会导致三个未定义的结果,而console.log($(this).name.text())会导致&#34;无法读取未定义的属性&#34;错误。

在函数中尝试$(this)的示例:

 function allForms(obj) {
    options.empty();
    $.each(obj, function(index, val){

        var add = val.name

        console.log($(this).name);
    })
 };

2 个答案:

答案 0 :(得分:1)

您可以sort Array,然后使用vanilla Javascript for-loop

附加选项

for-loop

之前对数组进行排序
obj.sort((a, b) => a.name > b.name ? 1 : (a.name < b.name ? -1 : 0));

&#13;
&#13;
var options = $("#forms-stage");

var formsTest = [{
    name: "Here's a Form",
    category: ["cat1"]
  },
  {
    name: "Sample Form",
    category: ["cat2"]
  },
  {
    name: "zzAnother Form",
    category: ["cat1", "cat2"]
  },
];

function allForms(obj) {
  obj.sort((a, b) => a.name > b.name ? 1 : (a.name < b.name ? -1 : 0));

  options.empty();
  $.each(obj, function(index, val) {
      options.append("<option>" + val.name + "</option>");
  });
};

allForms(formsTest);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="forms-stage"></select>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用function allForms(arr) { options.empty(); const names = arr.map(obj => obj.name); $.each(names, function(index, val) { options.append("<option>" + val + "</option>"); }); };

从数组中的对象中提取名称
scipy.interpolate.splev()

<强> DEMO