将数组排序为新的2D数组

时间:2020-08-02 13:29:57

标签: javascript arrays typescript


[
  {
    "id": 3401,
    "league": {
      "id": 4140,
      "image_url": "pngurl.png",
      "modified_at": "2019-02-19T15:29:07Z",
      "name": "League Cup",
      "slug": "league-slug",
      "url": null
    }
  }
]

我在数组中有很多这样的对象。如何以一种这样的方式对数组进行排序/格式化,从而得到一个新的数组/字典,该对象的对象是"id"中按"league"的{​​{1}}值排序的对象。现在,我有一个普通的数组,但是我希望通过键值对某些东西进行排序,例如4140:[来自具有联赛ID 4140的数组中的对象]或按4140排序的2d数组。我是否需要使用[[array with all objects containing league with value "id" of 4140], [array with objects with league value id 4141], etc..]或类似的东西?我对Java语言还很陌生。

这就是我期望得到的代码。

map

3 个答案:

答案 0 :(得分:2)

您需要遍历它,并根据您的联赛ID将它们分组为一个新对象。

示例:

const output = {};
const input = [
  {
    "id": 1,
    "league": {
      "id": 7,
      "image_url": "pngurl.png",
      "modified_at": "2019-02-19T15:29:07Z",
      "name": "League Cup",
      "slug": "league-slug",
      "url": null
    }
  },
  {
    "id": 2,
    "league": {
      "id": 7,
      "image_url": "pngurl.png",
      "modified_at": "2019-02-19T15:29:07Z",
      "name": "League Cup",
      "slug": "league-slug",
      "url": null
    }
  },
  {
    "id": 3,
    "league": {
      "id": 8,
      "image_url": "pngurl.png",
      "modified_at": "2019-02-19T15:29:07Z",
      "name": "League Cup",
      "slug": "league-slug",
      "url": null
    }
  }
];

input.forEach(x => {
  if (!output[x.league.id]) {
    output[x.league.id] = [];
  }

  output[x.league.id].push(x);
});

答案 1 :(得分:0)

要对对象数组进行排序,应使用数组的sort()函数

var yourArray = [{
    "id": 3401,
    "league": {
      "id": 4140,
      "image_url": "pngurl.png",
      "modified_at": "2019-02-19T15:29:07Z",
      "name": "League Cup",
      "slug": "league-slug",
      "url": null
    }
  },
  {
    "id": 3405,
    "league": {
      "id": 4145,
      "image_url": "pngurl.png",
      "modified_at": "2019-02-19T15:29:07Z",
      "name": "League Cup",
      "slug": "league-slug",
      "url": null
    }
  },
  {
    "id": 3402,
    "league": {
      "id": 4143,
      "image_url": "pngurl.png",
      "modified_at": "2019-02-19T15:29:07Z",
      "name": "League Cup",
      "slug": "league-slug",
      "url": null
    }
  }
]

yourArray.sort((a, b) => {
  if (a.league.id < b.league.id) {
    return -1;
  }
  if (a.league.id > b.league.id) {
    return 1;
  }
  return 0;
})

//Output will be sorted array
console.log(yourArray);

答案 2 :(得分:0)

使用['10', '10', '5'] ['20', '10', '10'] 并将map应用于每个sort

object.tournaments