按另一个相关值对javascript数组进行排序

时间:2018-12-27 02:47:02

标签: javascript jquery

我在根据需要对数组进行排序时遇到了挑战;

下面是我的代码:

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

我在做什么错,我该如何解决?

4 个答案:

答案 0 :(得分:2)

您可以构造具有image_idfilename属性的对象数组,而不是构造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)
相关问题