我有一个响应对象,它有一个键标记,其值是json。我试图根据一个键对json进行排序,然后在列表中迭代,并将对象推送到反应列表中。我看到,当我单独打印时,它们会像预期的那样出现,但当我作为一个整体打印时,他们的顺序不一样。
sortTags: function (response) {
tagss = []
response.tags.sort((a, b) => a.disp_id - b.disp_id).map(function(tag) {
console.log(tag)
tagss.push(tag)
});
console.log(tagss)
return tagss;
}
我看到当我执行console.log(tag)
时,它按预期的顺序打印。但console.log(tagss)
的打印顺序不同。
这个问题可能很天真。请帮忙。提前谢谢。
您不需要map
来执行此操作。sort
将返回一个新创建的排序数组。您只需要使用排列运算符...
克隆tags
数组,然后返回排序结果return response.tags.sort((a, b) => a.disp_id - b.disp_id)
。
运行代码段以查看其运行情况
const resp = {
tags: [{
name: "Nikos",
disp_id: 45,
}, {
name: "Giorgos",
disp_id: 25,
}, {
name: "Adreas",
disp_id: 21,
}, {
name: "Maria",
disp_id: 67,
}, {
name: "Panos",
disp_id: 19,
}]
};
const Sorter = {
sortTags: function(response) {
return [...response.tags].sort((a, b) => a.disp_id - b.disp_id);
}
}
document.getElementById('result').textContent = JSON.stringify(
Sorter.sortTags(resp)
, null, 2);
<pre id="result"></pre>
您可以只使用sort
方法,然后如果您想克隆阵列,可以使用concat
。
response.tags.sort((a, b) => a.disp_id - b.disp_id)
tagss = [].concat(tags)