我正在构建一个接收包含对象的数组的函数。我需要按字母顺序从数组中的对象填充一个包含一些值的列表。
这是我迄今为止所做的尝试:
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;。我认为问题是因为循环遍历每个位置,附加选项会导致问题。
我已经查看了其他解决方案here和here,但它们似乎都不适用于我在这里的对象数组。
这两种解决方案都使用$(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);
})
};
答案 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));
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;
答案 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 强>