Как запустить функцию на каждом из элементов массива в Javascript - PullRequest
0 голосов
/ 28 марта 2012

Я хочу запустить функцию, которая существует для каждого из элементов моего массива.
Я знаю, что это можно сделать с помощью цикла for, a each и map, но ни один из них не преследует чисто функциональный подход. например, с картой это будет выглядеть примерно так:
var a = [1,2,3].map(function(item) { item.funcName(params); });<br>

Мне наплевать на возвращаемые значения этих функций

пример кода, который я хотел бы иметь:
var a = [1,2,3].magicRun('funcName'[, paramsArray]);;

Есть ли такая вещь в чистом JS? Есть ли такая вещь в ExtJS? (который мне помог. загружен вер. 4.1)

Спасибо!

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

В чистом Js вы можете добавить функцию "map" к прототипу объекта Array

В этом примере я создаю sqrt для каждого элемента массива

if (!Array.prototype.map)
    Array.prototype.map = function(fun)
    {
        var len = this.length;
        if (typeof fun != "function")
            throw new TypeError();
        var res = new Array(len);
        for (var i = 0; i < len; ++i)
            res[i] = fun(this[i]);
        return res;
};


var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);

//could be an alert
console.log("roots is : " + roots );
1 голос
/ 28 марта 2012

Нет ничего лучше, чем то, что вы хотите в чистом JS, и я не думаю, что ExtJS также имеет его (но я не использовал ExtJS в гневе с версии 3. что-то, так что может быть)

MooTools однако добавляет этот invoke метод к Array:

invoke: function(methodName){
  var args = Array.slice(arguments, 1);
  return this.map(function(item){
    return item[methodName].apply(item, args);
  });
},

... который выпущен по лицензии MIT, вы можете поднимать без всякой плохой кармы

0 голосов
/ 08 января 2013
if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}

Exemple:

<html>
<head>
<title>JavaScript Array forEach Method</title>
</head>
<body>
<script type="text/javascript">
if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}

function printBr(element, index, array) {
  document.write("<br />[" + index + "] is " + element ); 
}

[12, 5, 8, 130, 44].forEach(printBr);

</script>
</body>
</html>

источник: http://www.tutorialspoint.com/javascript/array_foreach.htm

...