寻找javascript技术

寻找javascript技术,javascript,Javascript,我正在尝试学习一些新鲜的javascript技术,为了达到这一目的,我模拟了一个函数: function doAction(index) { for(var a = Array.prototype.slice.call(arguments, 1), i = 0, r = [], l = a.length; i < l; i++) r.push(a[i][index]); return r; } doAction(2, ['a',

我正在尝试学习一些新鲜的javascript技术,为了达到这一目的,我模拟了一个函数:

function doAction(index) {
    for(var a = Array.prototype.slice.call(arguments, 1), 
            i = 0, r = [], l = a.length; i < l; i++) 
        r.push(a[i][index]);
    return r;
}

doAction(2, ['a','b','c'],['a','b','c'],['a','b','c']) //==> ["c", "c", "c"]

我认为没有太多需要优化的地方,但我会做两个改变

  • 首先,声明一个真正的参数,而不是使用一些不在这里的参数
  • 其次,我将变量初始化放在for之外
这两点并不是真正的优化,而是可读性的问题(也许还有品味的问题)

代码类似于

function doAction(index,a) {
   var r = [], l = a.length;
   for(var i=0; i < l; i++) r.push(a[i][index]);
   return r;
}
函数doAction(索引,a){
var r=[],l=a.长度;
对于(var i=0;i

调用将是
doAction(2,['a','b','c'],['a','b','c'],['a','b','c'])

可以这样简化,因为不需要复制参数数组。它只需要复制,需要修改:

function doAction(index) {
    var r = [];
    for(var i = 1; i < arguments.length; i++) r.push(arguments[i][index]);
    return r;
}
函数执行(索引){
var r=[];
对于(var i=1;i
或者,如果要保留len变量,可以是:

function doAction(index) {
    var r = [];
    for(var i = 1, len = arguments.length; i < len; i++) r.push(arguments[i][index]);
    return r;
}
函数执行(索引){
var r=[];
对于(var i=1,len=arguments.length;i
这里的jsFiddle:


至于名称,您可以称它为
multiSlice()
multiIndex()

它是一个mapIndex函数,我想我以前听说过它叫“列切片”。但是,它也是一个更通用的
.map()
方法的具体实现--@IAbstractDownvoteFactory感谢您注意到我的愚蠢:)
function doAction(index) {
    var r = [];
    for(var i = 1, len = arguments.length; i < len; i++) r.push(arguments[i][index]);
    return r;
}