我正在使用jQuery进行 AJAX 调用,以便从API中提取数据-
const generateFilterOptions = () => {
$.ajax({
method: 'GET',
url: baseURL,
}).done(function (data, status, xhr) {
let category = [];
let categoryID = [];
$.each(data, function (index, value) {
category.push(value.field_resource_category);
categoryID.push(value.field_resource_category_id);
})
category = [...new Set(category.toString().split(',').map(el => el.trim()))];
categoryID = [...new Set(categoryID.toString().split(',').map(el => el.trim()))];
category.forEach(
(categoryName, id) =>
$("#categoryFilter").append(`
<div class="d-flex align-items-start">
<input type="checkbox" name="${categoryName}" value="${categoryID[id]}" id="cat-${categoryID[id]}">
<label class="fs-6" for="cat-${categoryID[id]}">${categoryName}</label>
</div>
`)
);
});
}
返回的值是1到2位数字,其中许多是重复的,因为它提取了一个类别的ID,并且许多结果共享同一个类别。
标记必须包括被拉取的名称以及类别ID,并且它是用于过滤器的,因此结果不能被复制。
category.push(value.field_resource_category);
categoryID.push(value.field_resource_category_id);
我首先将值推入它们自己的数组中
category = [...new Set(category.toString().split(',').map(el => el.trim()))];
categoryID = [...new Set(categoryID.toString().split(',').map(el => el.trim()))];
然后我使用Set()删除任何重复项。toString()将数组更改为字符串,split()删除逗号,然后.map和.trim()删除空格
category.forEach(
(categoryName, id) =>
$("#categoryFilter").append(`
<div class="d-flex align-items-start">
<input type="checkbox" name="${categoryName}" value="${categoryID[id]}" id="cat-${categoryID[id]}">
<label class="fs-6" for="cat-${categoryID[id]}">${categoryName}</label>
</div>
`)
);
然后我有一个for each循环,它返回名称和ID,这样我就可以将其放入HTML标记中。
我需要对结果进行处理,使它们按字母顺序排列。
我尝试添加.sort(),但问题是返回的ID是一个字符串而不是一个数字,所以11按字母顺序排在2之前
2条答案
按热度按时间scyqe7ek1#
您可以通过将数字字符串转换为数字并从另一个数字中减去一个数字来确定其顺序,从而对数字字符串进行排序。
lymgl2op2#
甚至比@ray的解决方案还要短:
字符串会根据所执行的操作自动转换为数字。你不用担心这就是所谓的类型强制,尽管有争议,但它是JavaScript的一个“特性”。只是要注意边缘情况:https://www.oreilly.com/library/view/you-dont-know/9781491905159/ch04.html(检查“边缘情况”部分)