两个数组的Javascript Concat值

时间:2016-08-27 03:49:52

标签: javascript arrays

我有两个这样的数组:

const a = ['a', 'b', 'c', 'd'];
const b = ['1', '2', '3', '4'];

我试图制作一个像这样的新阵列:

const c = ['a1', 'b2', 'c3', 'd4'];

我试过这种方式:

const c = [];
c.push([`${a[0]}${b[0]}`, `${a[1]}${b[1]}`, `${a[2]}${b[2]}`, `${a[3]}${b[3]}`]);

实际上循环数据并执行此操作需要17400毫秒。

我拿出了c.push([........]);,它降到了1250毫秒。

为什么这需要这么长时间?

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:3)

您可以使用.map来实现这一目标。映射a,然后在每个循环上使用索引来获取b的元素。

const a = ['a', 'b', 'c', 'd'];
const b = ['1', '2', '3', '4'];

var c = a.map(function (d, i) {
    return d + String(b[i])
})

console.log(c)
// ["a1", "b2", "c3", "d4"]

使用es6清洁代码:

var c = a.map((d, i) => `${d}${b[i]}`)

答案 1 :(得分:1)

一个简单的循环。



.cart-remove {
    margin:auto;
    text-align:center;
    background-color: #fff;
    border-radius: 50%;
}




答案 2 :(得分:1)

正如我怀疑并且您确认的那样,真正的问题是您做了太多push

push修改数组的长度。规范不强制执行数组的任何数据结构,但对于非稀疏数据结构,实现通常使用将值连续存储在内存中的列表。当您更改数组的长度时,这会有问题,因为附加数据无法放入当前数据的内存中,因此必须移动所有数据。 push最终在摊还的时间内保持不变,而不仅仅是不变。

但是,如果您事先知道结果数组的长度,通常最好预先分配。

然后,而不是

var array = [];
for(var i=0; i<2e4; ++i)
  array.push([a[0]+b[0], a[1]+b[1], a[2]+b[2], a[3]+b[3]]);

我会用

var array = new Array(2e4);
for(var i=0; i<2e4; ++i)
  array[i] = [a[0]+b[0], a[1]+b[1], a[2]+b[2], a[3]+b[3]];