用于循环数组参数的Javascript

时间:2013-02-21 20:55:40

标签: javascript loops for-loop

我试图循环一个数组参数并返回传递数组的前n个元素,而不使用标准的javascript函数,如slice,concat,push,pop等...

var n = 0;
var anyArray = Array;
var SR = {};
SR.first = function(anyArray,n){
var isArray = (Object.prototype.toString.apply(anyArray) === '[object Array]');
var specification = (typeof n === "number");
if(isArray && specification){
        for(i = 0; i < n; i++){
                return Array(anyArray[i]); 
            }
        }
    else if (isArray || !specification){
        return anyArray[0];
    }
}

我不想使用+ =来构建返回数组“anyArray”。所以,当“SR.first([1,2,3,4,5,6,7],4);”时,我将如何让它返回像[1,2,3,4]这样的东西;“被称为?

5 个答案:

答案 0 :(得分:1)

var newArr = Array.apply(null, anyArray); // new Array using original content

newArr.length = n; // truncate the length of the new Array

return newArr;     // return it

anyArray只有一个成员(一个数字)时,会出现一个小边缘情况。你需要防范这种情况。

答案 1 :(得分:0)

我不明白为什么你不想使用像Arraypush这样的slice操作,但这可行:

if ( isArray && specification ) {
  var result = [];
  for ( var i = 0; i < n; i++ ) {
    result[i] = anyArray[i]; 
  }
  return result;
}
else ...

答案 2 :(得分:0)

如果由于某种原因你真的不想使用原生的javascript函数,你可以逐个将每个元素分配给你的返回数组。

var returnArray = [];

if(isArray && specification) {
    for(i = 0; i < n; i++) {
        returnArray[i] = anyArray[i];
    }
}

return returnArray;

答案 3 :(得分:0)

SR.first = function(anyArray,n){ 

  var newArray = [];
  for(i = 0; i < n; i++){
      newArray[newArray.length] = anyArray[i]; 
  }
  return newArray;

}

答案 4 :(得分:0)

首先 - 全局变量真的很糟糕!你不需要声明anyArray和n,因为它是一个函数参数,它在函数调用时声明。 第二个问题 - 您可以将元素数量大于数组长度 - 您必须检查这种情况。

var SR = {};
SR.first = function(anyArray,n){
    var isArray = (anyArray instanceof Array),
        specification = (typeof n === 'number'),
        tmp = new Array;
    console.log(isArray, specification);
    if(isArray && specification){
        for(i = 0, l = anyArray.length; i < n && i < l; i++){
            tmp[i] = anyArray[i];
        }
        return tmp;
    } else if (isArray || !specification){
        return anyArray[0];
    }
}