【问题标题】:Shift entire column in multidimensional array using only javascript or ES6仅使用 javascript 或 ES6 移动多维数组中的整个列
【发布时间】:2019-02-19 11:33:03
【问题描述】:

我有一个如下所示的多维数组,我想使用带有 no jquery 或任何其他插件的 javascript 或 ES6 移动列位置。

例如:初始数组将如下所示。

1|2|3|4
2|2|6|4
4|2|3|4
9|2|7|4

如何将第 4 列移到第 1 位,使其看起来像这样?

4|1|2|3
4|2|2|6
4|4|2|3
4|9|2|7

有人可以帮助逻辑移动这样的任何列吗?

【问题讨论】:

标签: javascript arrays ecmascript-6


【解决方案1】:

您可以通过使用给定索引对内部数组进行切片来为映射的外部数组分配新项目。

为了获得原始排序,您可以按长度和索引的增量进行移位。

const shift = (array, index) => array.map(a => [...a.slice(index), ...a.slice(0, index)]);


var array = [[1, 2, 3, 4], [2, 2, 6, 4], [4, 2, 3, 4], [9, 2, 7, 4]],
    index = 3;

array = shift(array, index);
console.log(array.map(a => a.join(' ')));

array = shift(array, array[0].length - index);
console.log(array.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 这是针对特定列的。如何使它成为一个函数,以便它来回改变,就像我可以这样移动任何列。
【解决方案2】:

您可以使用array.map 重新排列值:

function rearrange(rows, pos) {
  return rows.map(function(cols) {
    return pos.map(function(i) {
      return cols[i];
    });
  });
}

var old_arr;
var new_arr;

old_arr = [
  [1, 2, 3, 4],
  [2, 2, 6, 4],
  [4, 2, 3, 4],
  [9, 2, 7, 4]
];
new_arr = rearrange(old_arr, [3, 0, 1, 2]);
console.log(new_arr);

old_arr = [
  [1, 2, 3, 4],
  [2, 2, 6, 4],
  [4, 2, 3, 4],
  [9, 2, 7, 4]
];
new_arr = rearrange(old_arr, [3, 2, 1, 0]);
console.log(new_arr);

【讨论】:

  • 这是针对特定列的。如何将其作为一个函数,以便它可以针对任何列进行更改,就像我可以以这种方式移动任何列一样。
  • 我觉得这两个例子超级好理解。如果您对 ES6 感到满意,请选择 ES6 解决方案。
  • 查看修改后的答案。
猜你喜欢
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多