Настройка массива в параметрах функции - PullRequest
1 голос
/ 18 июля 2011

просто хочу настроить массив через мои параметры. Посмотрите этот псевдокод ниже, чтобы увидеть, что я пытаюсь сделать:

function someFunction(x = new Array()){
 for (a in x){
  some action with x[a];
 }
}

someFunction([value a, value b, value c]);

Так что я пытаюсь сделать что-то похожее на это. Заранее спасибо, ребята!

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

Если я вас правильно понял, вы хотите использовать пустой массив, если в функцию не переданы параметры. Вы можете следующий код для достижения этой цели.

function someFunction(x){
    x = x || [];
    //...    
}

someFunction([value a, value b, value c]);
0 голосов
/ 18 июля 2011

Это в основном особый случай each:

function each(a, f) {
    a = a || [];
    for (var i=0; i < a.length; ++i) {
        f(a[i]);
    }
}

хотя each обычно реализуется как метод Array, наряду с map, filter и reduce / fold:

Array.prototype.each = function(f) {
    for (var i=0; i < this.length; ++i) {
        f(this[i], i);
    }
};

Array.prototype.map = function(f) {
    var result = [];
    for (var i=0; i < this.length; ++i) {
        result[i] = f(this[i], i);
    }
    return result;
};

Array.prototype.map = function(keep) {
    var result = [];
    for (var i=0; i < this.length; ++i) {
        if (keep(this[i], i)) {
            result.push(this[i]);
        }
    }
    return result;
};

Array.prototype.foldl = function(f) {
    var result = this[0];
    for (var i=1; i < this.length; ++i) {
        result = f(result, this[i]);
    }
    return result;
};

Array.prototype.foldr = function(f) {
    var i=this.length-1
    var result = this[i];
    for (--i; i >= 0; --i) {
        result = f(this[i], result);
    }
    return result;
};

Array.prototype.reduce = Array.prototype.foldl;

Обратите внимание, что использование for (... in ...) с массивами может вызвать проблемы, так как оно подберет свойства, определенные в массиве, в дополнение к целочисленным индексам.

0 голосов
/ 18 июля 2011

Попробуйте это:

function someFunction() {
    for(var i = 0; i < arguments.length; i+=1) {
       // some action with arguments[i]
    }
}

// usage
someFunction(a, b, c);
someFunction.apply(window, [a, b, c]);

Свойство arguments автоматически определяется внутри функции, с новым для каждой области действия функции. Это почти массив, но не совсем. Вы можете использовать его как массив в 99% случаев.

Второй пример использования: если у вас есть массив, который вы хотите передать, но он не определен статически. Метод apply для объекта функции позволит вам передать контекст и массив аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...