如何交换数组值并生成新数组?

时间:2018-03-20 19:00:38

标签: javascript arrays sorting reverse

我有一个数组是一组坐标,我想交换它们,并生成一个新数组。

我想只交换区域条目:

var Regions = [
  {"group": "region_01",
  "coords": [
    [3110, 2323],
    [3119, 2344],
    [3117, 2385],
    [3110, 2417],
    [3110, 2323]
  ]}]

所以它应该是这样的:

var Regions = [
  {"group": "region_01",
  "coords": [
    [2323, 3110],
    [2344, 3119],
    [2385, 3117],
    [2417, 3110],
    [2323, 3110]
  ]}]

反向方法在这种类型的数组中不起作用吗?这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用嵌套的Array.forEach()调用来反转子数组:

const Regions = [{"group":"region_01","coords":[[2323,3110],[2344,3119],[2385,3117],[2417,3110],[2323,3110]]}];
  
Regions.forEach(({ coords }) => 
  coords.forEach((arr) => arr.reverse())
);

console.log(Regions);

答案 1 :(得分:0)

您可以使用函数reverse修改原始数组。

var Regions = [
  {"group": "region_01",
  "coords": [
    [3110, 2323],
    [3119, 2344],
    [3117, 2385],
    [3110, 2417],
    [3110, 2323]
  ]}];
  
Regions.forEach((r) => r.coords.forEach(c => c.reverse()));

console.log(Regions);
.as-console-wrapper { max-height: 100% !important; top: 0; }

如果您不想使用函数reverse(),可以使用函数map进行交换。

var Regions = [
  {"group": "region_01",
  "coords": [
    [3110, 2323],
    [3119, 2344],
    [3117, 2385],
    [3110, 2417],
    [3110, 2323]
  ]}];
  
Regions.forEach((r) => r.coords = r.coords.map(([left, right]) => [right, left]));

console.log(Regions);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

var Regions = {
  group: "region_01",
  coords: [
    [3110, 2323],
    [3119, 2344],
    [3117, 2385],
    [3110, 2417],
    [3110, 2323]
  ]
}

for (var i = 0, len = Regions.coords.length; i < len; i++) {
  var coord = Regions.coords[i];
  coord[1] = [coord[0], coord[0] = coord[1]][0];
}