在JavaScript中创建具有重复列表项的新列表的最快/推荐方法是什么?

在JavaScript中创建具有重复列表项的新列表的最快/推荐方法是什么?,javascript,Javascript,我的价值观自然是这样的: [1,2,3,4,5,6,7,8,9] 我正在开发一个需要输入参数的服务器api,如: [1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9] 有没有比简单的for循环更快或更具js风格的方法 var f = function(values) { var newList = []; var i; for (i = 0; i < values.length; i++) { newList.push(v

我的价值观自然是这样的:

[1,2,3,4,5,6,7,8,9]
我正在开发一个需要输入参数的服务器api,如:

[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9]
有没有比简单的for循环更快或更具js风格的方法

var f = function(values) {
    var newList = [];
    var i;
    for (i = 0; i < values.length; i++) {
         newList.push(values[i]);
         newList.push(values[i]);
    }
    return newList;
}
var f=函数(值){
var newList=[];
var i;
对于(i=0;i
您可以通过组合它们来避免调用
.push()
,因为
.push()
是可变的

 newList.push(values[i], values[i]);

除此之外,我怀疑您是否会更快。

您可以通过组合它们来避免调用
.push()
,因为
.push()
是可变的

 newList.push(values[i], values[i]);

除此之外,我怀疑您的速度会快得多。

您可以使用
每个功能

这将减少你的步幅

var list=[1,2,3,4,5,6,7,8,9]
var newlist=[];
$.each(list,function(index,data){newlist.push(data);newlist.push(data)})

希望这有帮助。

您可以使用
每个功能

这将减少你的步幅

var list=[1,2,3,4,5,6,7,8,9]
var newlist=[];
$.each(list,function(index,data){newlist.push(data);newlist.push(data)})
希望这有帮助。

尝试:
[].concat.call([1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]).sort()

或更通用:

(function(){
   return this.concat(this).sort(function(a,b){return a-b;});}
).call([1,2,10,20,30,40,50,60,70,80,9]);
或者只是一个函数:

function(v) {
    var i = v.length, nw = [];
    while (i--) { nw.push(v[i],v[i]); }
    return nw.reverse();
}
或者使用
map

var nw = ([1,2,3,4,5].map(function(a){this.push(a,a)},nw=[]),nw);
我怀疑这个函数是最有效的。

试试:
[].concat.call([1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9])sort()

或更通用:

(function(){
   return this.concat(this).sort(function(a,b){return a-b;});}
).call([1,2,10,20,30,40,50,60,70,80,9]);
或者只是一个函数:

function(v) {
    var i = v.length, nw = [];
    while (i--) { nw.push(v[i],v[i]); }
    return nw.reverse();
}
或者使用
map

var nw = ([1,2,3,4,5].map(function(a){this.push(a,a)},nw=[]),nw);

我怀疑该功能是最有效的。

可能是分配速度更快

L2 = [];
for (var i=L1.lenght*2; i-->0;) {
    L2[i>>1] = L1[i];
}
但是这种微观优化确实需要在具体的实现中进行分析(不同的Javascript引擎之间的巨大差异也不会让我感到惊讶)


除非这是一个关键问题(如果这是一个关键问题,他们可能认为Javascript是一个错误的工具),否则我会保持最具可读性的方式

L2 = [];
for (var i=L1.lenght*2; i-->0;) {
    L2[i>>1] = L1[i];
}
但是这种微观优化确实需要在具体的实现中进行分析(不同的Javascript引擎之间的巨大差异也不会让我感到惊讶)


除非这是一个关键问题(如果这是一个关键问题,他们可能会认为Javascript是错误的工具),否则我会保持最可读的方式。

函数调用相对昂贵。那会慢一些。jQuery(我想这就是您正在使用的)是不需要的,并且您不知道OP是否正在使用它。函数调用相对昂贵。那会慢一些。jQuery(我想这就是您正在使用的)是不需要的,并且您不知道OP是否正在使用它。