我在根据需要对数组进行排序时遇到了挑战;
下面是我的代码:
callbacks : {
onComplete : function(id, filename, response) {
handler.addImage({
uuid : response.image_id,
thumbnailUrl : response.image_url,
name : response.filename
}, id);
this.setDeleteFileParams({
id : response.image_id
}, id);
self._images.push(response.image_id); /* here */
}
}
self._images
返回带有response.image_id
的数组,但它们未按预期排序;我需要按response.filename
排序的结果。
以下示例说明了我的意思;
鉴于:
response.image_id -> response.image_id
8870 -> img03.jpg
8889 -> img02.jpg
8875 -> img01.jpg
我的函数的结果将是:
Array(3)
0: 8889
1: 8875
2: 8870
相反,这是我想要实现的目标:
Array(3)
0: 8875
1: 8889
2: 8870
我在做什么错,我该如何解决?
答案 0 :(得分:2)
您可以构造具有image_id
和filename
属性的对象数组,而不是构造image_id
数组。
self._images.push({
filename: response.filename,
image_id: response.image_id
});
现在您拥有filename
属性,您可以使用它对数组进行排序。
self._images.sort((a, b) => a.filename.localeCompare(b.filename));
如果只想获取image_id
的数组,则可以使用本机.map()
方法。
self._images.map(image => image.image_id)
答案 1 :(得分:0)
如果您有这样的对象数组:
const objs = [
{8870: "img03.jpg"},
{8889: "img02.jpg"},
{8875: "img01.jpg"}
];
您可以将Object.values
和.sort()
与.localeCompare()
一起使用来对对象数组进行排序。 Object.values
方法将为您提供给定对象内的所有值。由于数组中的所有对象只有一个值,因此我们可以将此数组的索引为0
。 .localeCompare
允许我们比较两个字符串并使用.sort()
方法对它们进行排序。
请参见下面的工作示例:
const objs = [{
8870: "img03.jpg"
},
{
8889: "img02.jpg"
},
{
8875: "img01.jpg"
}
],
res = objs.sort((a, b) => Object.values(a)[0].localeCompare(Object.values(b)[0]));
console.log(res);
答案 2 :(得分:0)
假设您正在使用javascript(https://www.w3schools.com/jsref/jsref_sort.asp)中的本机排序功能。
使用此方法,您可以在自变量中标识排序功能。尝试类似的东西:
response.sort(function(responseA, responseB){return responseA.filename-responseB.filename});
答案 3 :(得分:0)
self._images.push(response.image_id); /* here */
在上面的代码中,您只需要推送ID,还需要推送文件名。您需要使用文件名和ID组成对象数组。然后可以如下排序
self._images.sort((a,b) => a.filename > b.filename)