2012-03-28 4 views
0

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

Я не заботиться о возвращаемых значений этих функций

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

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

Спасибо!

+1

Вы пробовали [ 'Array.forEach'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach)? – Zeta

+0

Что именно нужно достичь? 'magicRun' должен делать то, что именно? Что вы ожидаете от этого «paramsArray»? – jAndy

ответ

1

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

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

, хотя это и не решение проблемы, это ответ на вопрос ... я принимаю. Благодаря! – Nadav

2

В чистых Js можно добавить функцию «Map» для массива объектов прототипа

В этом примере я делаю 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); 
+0

Этот подход запускает внешнюю функцию для каждого из элементов массива (Math.sqrt), а не функцию самого элемента – Nadav

+0

То, что я понял, должно сделать извините :) –

0
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

 Смежные вопросы

  • Нет связанных вопросов^_^