我有两个这样的数组:
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毫秒。
为什么这需要这么长时间?
这样做的最佳方式是什么?
答案 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]];