1

我的价值观自然以这种形式出现:

[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;
}
4

4 回答 4

3

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

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

除此之外,我怀疑你会更快。

于 2013-10-17T05:35:57.840 回答
1

你可以使用each函数。

这将减少您的步数。

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

希望这可以帮助。

于 2013-10-17T05:40:03.317 回答
1

尝试:[].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);

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

于 2013-10-17T05:53:50.590 回答
1

可能是任务更快...

L2 = [];
for (var i=L1.lenght*2; i-->0;) {
    L2[i>>1] = L1[i];
}

但是这种微优化确实需要在具体实现上进行分析(我不会对不同 Javascript 引擎之间的巨大差异感到惊讶)。

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

于 2013-10-17T06:04:47.743 回答