我试图循环一个数组参数并返回传递数组的前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]这样的东西;“被称为?
答案 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)
我不明白为什么你不想使用像Array
和push
这样的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];
}
}