2012-03-28 58 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]);;

是純JS中有這樣的事情嗎? ExtJS中有這樣的事情嗎? (我有效。加載版本4.1)

謝謝!

+1

你試過['Array.forEach'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach)? – Zeta 2012-03-28 10:18:04

+0

什麼試圖完全實現? 'magicRun'應該做什麼?你期望這個'paramsArray'應該發生什麼? – jAndy 2012-03-28 10:23:41

回答

1

沒有什麼完全像你想要什麼純JS,我不認爲ExtJS的有它要麼(但我從版本3.something沒有用憤怒ExtJS的,所以有可能是)

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 2012-03-28 13:50:01

2

在純的js,你可以添加功能「映射」到Array對象的原型

在這個例子中,我做了數組的每個元素的開方

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 2012-03-28 13:53:52

+0

這就是我理解它應該對不起:) – 2012-03-28 15:40:22

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); 
    } 
    }; 
} 

爲例:

<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

相關問題