在单独循环和同时打印所有对象时,对象的顺序不同



我有一个响应对象,它有一个键标记,其值是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)

最新更新