-3

我需要理解这段代码。它是为我公司的前开发人员制作的,但我真的不太了解它是如何工作的……如果有人可以帮助我,我会很感激。

var main= function(arr, fun) {
     var i= 0,
         max= arr.length,
         array= [];
     for (; i< max; i++) {
       array.push(fun(arr[i]));
     }
     return array;
};
4

8 回答 8

2

它本质上是一个非常模糊的Array.prototype.map实现。我个人建议这样做:

function array_map(arr,callback) {
    if( arr.map) return arr.map(callback);
    for( var i=0, l=arr.length, ret = []; i<l; i++) {
        ret[i] = callback(arr[i],i,arr);
    }
    return ret;
}

如果存在,它使用浏览器的内置函数,否则手动模拟它。

于 2013-10-17T12:01:21.323 回答
1

如果把参数“fun”当成一个函数名,也许你就能很好地理解它。您的代码只是在作为“fun”的输入参数运行后返回数组“arr”的结果。

如下图所示:

var arr = [0, 1, 2];
function fun( arg ) {
    return arg + 1;
}

在我看来,这样调用您的代码:

main(arr, fun);

它应该返回:

[1, 2, 3]

当然,我没有检查它是否真的正确,你可以测试一下~

祝你好运

于 2013-10-17T12:08:26.630 回答
0
var main = function(arr, fun) {
     var i = 0, //starting a loop through the array at 0
         max = arr.length, //getting the number of items in the array
         array= []; //declaring a new array
     for (; i< max; i++) { //this is a loop that goes through all the values in the array
       array.push(fun(arr[i])); //this adds the values to the new array, using the function 'fun' to change the value
     }
     return array; //this returns the array
};
于 2013-10-17T12:01:46.317 回答
0

它通过将arr函数的前一个数组的结果放入新数组中来创建一个新fun数组。

例如,如果fun得到一个数的平方并且arr是 [1, 2, 3],main将返回 [1, 4, 9]

于 2013-10-17T12:01:49.903 回答
0

它创建了一个名为main. 这个函数接受一个数组和一个处理函数fun作为参数。它为数组的每个元素提供fun功能,并将此调用 ( fun(arr[i])) 的结果添加到新的array. 例如,下面使用 main 函数返回一个数组{2, 3, 4, 5}

main({1, 2, 3, 4}, function(item) {
    return item + 1;
});
于 2013-10-17T12:02:33.220 回答
0

让我们拆分代码:

// will create a function which accepts 2 parameters
var main= function(arr, fun) {

//variable declaration
var i= 0,
max= arr.length,  // get array length
array= [];       // create new array

// add function value (fun(arr[i])) to an array. arr is a parameter which is also an array
// fun(arr[i]) is a callback function which accepts 1 parameter (array one)
for (; i< max; i++) {
   array.push(fun(arr[i]));
}

// return the new array
 return array;
};
于 2013-10-17T12:03:23.220 回答
0

您需要一种策略来处理不熟悉的结构。在 Stackoverflow 上提出一个笼统的问题可能会在短期内有所帮助,但可能不会加强您的解释“肌肉”。

我建议首先确保您可以在调试器中运行代码并在函数的第一行代码处设置断点。然后使用调试器回答以下问题:

1)。进来的是什么?论据的类型是什么。

2)。返回什么

然后你会注意到 fun 实际上是一个函数。那么你的函数是从哪里调用的呢?什么函数作为第二个参数传递。

然后您可能想知道一些您以前从未见过的构造,例如 array.push() 的作用。所以一个快速的谷歌回答了这个问题。

突然间你明白并锻炼了你的“肌肉”。如果您仍然感到困惑,您可能有一个更好、更精确的问题要在这里问。

于 2013-10-17T12:09:13.447 回答
0
var main= function(arr, fun) {
    //intialing variables
     var i= 0,
         max= arr.length,
         array= [];

    //looping the variables
     for (; i< max; i++) {
         //push values in to array after using the function passed
       array.push(fun(arr[i]));
     }
     return array;
};

//to test I have defined a function which adds 1
var res = main([1,2,3], function(val) {return val + 1});

alert(res);

小提琴

于 2013-10-17T12:01:08.603 回答