【问题标题】:Javascript: reorder a large multidimensional array based on another arrayJavascript:基于另一个数组重新排序大型多维数组
【发布时间】:2017-06-24 07:59:36
【问题描述】:

我有一个行为类似于电子表格的多维数组。 第一项是列标题:

[
    ['A', 'B', 'C', 'D'],
    [ 1 ,  2 ,  3 ,  4 ],
    [ 5 ,  6 ,  7 ,  8 ],
    [...]
]

“列”的顺序由另一个数组定义:

['C', 'A', 'D', 'B']

预期结果是:

[
    ['C', 'A', 'D', 'B'],
    [ 3 ,  1 ,  4 ,  2 ],
    [ 7 ,  5 ,  8 ,  6 ],
    [...]
]

.map.splice.indexOf 会是最好的方法吗? 他们在 20k+ 阵列上的表现如何?

谢谢!

【问题讨论】:

  • 20K+ 阵列,你在开玩笑吗?如果您在 JS 中使用它,用户将永远不会访问您的网站。而是尝试在服务器中使用它
  • 别担心。为此,我正在使用带有 deferRender 的库。
  • 为什么要使用.splice()?当前的性能结果是什么?见jQuery - Can threads/asynchronous be done?
  • 为什么不使用配置 const 而不是改变数组本身。我敢肯定,当你使用数组时,不要按 0、1、2、3 的顺序去,而是按照你的配置常量所说的顺序,比如 2、0、3、1。它只是你如何理解订单。

标签: javascript multidimensional-array


【解决方案1】:

function reorder(data, order) {
  let header = data[0];
  let orderIndex = order.map(i => header.indexOf(i));
  return data.map(row => orderIndex.map(i => row[i]));
}

let data = [
    ['A', 'B', 'C', 'D'],
    [ 1 ,  2 ,  3 ,  4 ],
    [ 5 ,  6 ,  7 ,  8 ],
];

let order = ['C', 'A', 'D', 'B'];

console.log(reorder(data, order));

至于性能...您需要对其进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多