如何使用match()拆分数组中的行?

How to split the rows in the array using match()?

提问人:Lelik 提问时间:8/30/2023 最后编辑:Lelik 更新时间:8/30/2023 访问量:65

问:

我有一个包含行数组的矩阵。

let matrix=[['hello'],['world']];

我正在复制行。

matrix=matrix.map(x=>String(x).repeat(2)).map(x=>x.match(new RegExp??))

我想得到

[['hello','hello'],['world','world']]
JavaScript 数组字符串 匹配

评论


答:

2赞 The fourth bird 8/30/2023 #1

如果要复制数组,可以使用 concat

const matrix = [
  ['hello'],
  ['world']
];
const res = matrix.map(a => a.concat(a))
console.log(res);

或者,假设您有一个数组数组,并且想要获取 N 个条目而不是 1 个条目:

const matrix = [
  ['hello'],
  ['world']
];
const res = matrix.map(a => Array(4).fill(...a));
console.log(res);

0赞 Alexander Nenashev 8/30/2023 #2

你的代码将不起作用。首先没有方法,其次没有任何意义可以用来复制数组,第三,你试图分配给一个常量变量。使用更简单的工具。Array::repeat()RegExp::match()

由于您覆盖了原始数组,因此您可以对其进行更改:

const matrix = [
  ['hello'],
  ['world']
];
// push array into itself thus duplicating it
matrix.forEach(arr => arr.push(...arr));
console.log(matrix);

这肯定比用新数组覆盖要快:

enter image description here

<script benchmark data-count="5000000">

// @benchmark The fourth bird
{
let matrix = [
  ['hello'],
  ['world']
];
matrix = matrix.map(a => a.concat(a))
}

// @benchmark Alexander
{
const matrix = [
  ['hello'],
  ['world']
];

matrix.forEach(arr => arr.push(...arr));
matrix;
}
</script>
<script src="https://cdn.jsdelivr.net/gh/silentmantra/benchmark/loader.js"></script>

评论

0赞 Ja Da 8/30/2023
不过,您的基准测试在这里没有展示任何内容
0赞 Alexander Nenashev 8/30/2023
你能详细说明@JaDa吗?你在谈论什么?
0赞 Ja Da 8/30/2023
因为无论您使用什么基准测试工具,看起来您都将其设置为运行 500 万次,并且它以毫秒为单位提供答案。那部分只是噪音。
0赞 Alexander Nenashev 8/30/2023
@JaDa如果您知道更好的基准测试方法,请尽快解释。我的基准测试中存在持续时间差异,它们肯定会告诉哪个选项更快。这就是目标 - 确定哪个选项更快,仅此而已
0赞 Ja Da 8/30/2023
不,这里的最终目标是回答他的问题。显示统计数据并“看起来小一个数字”而不考虑实际数字和答案只是噪音。