0

我正在尝试遍历数组参数并返回传递数组的前 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] 的东西 叫做?

4

5 回答 5

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只有一个成员,这是一个数字。你需要提防这种情况。

于 2013-02-21T21:13:09.880 回答
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];
    }
}
于 2013-02-21T21:12:18.900 回答
0

我不明白您为什么不想使用and之Array类的操作,但这会起作用:pushslice

if ( isArray && specification ) {
  var result = [];
  for ( var i = 0; i < n; i++ ) {
    result[i] = anyArray[i]; 
  }
  return result;
}
else ...
于 2013-02-21T21:09:55.540 回答
0

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

var returnArray = [];

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

return returnArray;
于 2013-02-21T21:10:01.217 回答
0
SR.first = function(anyArray,n){ 

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

}
于 2013-02-21T21:10:27.247 回答