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

How to swap array values and generate a new array?

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

我只想交换区域条目:

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]
  ]}]

反向方法在这种类型的数组中不起作用,对吗?执行此操作的最佳方法是什么?

您可以使用嵌套 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);

可以使用函数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; }

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];
}