0

配列引数をループして、slice、concat、push、popなどの標準のJavaScript関数を使用せずに、渡された配列の最初のn要素を返そうとしています...

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

1 つの小さなエッジ ケースanyArrayは、数値であるメンバーが 1 つしかない場合です。そのシナリオを防ぐ必要があります。

于 2013-02-21T21:13:09.880 に答える
0

や などの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 関数を本当に使用したくない場合は、各要素を 1 つずつ戻り配列に割り当てることができます。

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 に答える
0

まず第一に、グローバル変数は本当に悪い習慣です! 関数引数であり、関数呼び出しで宣言されているため、anyArray と n を宣言する必要はありません。2 番目の問題 - 配列の長さよりも大きな要素数を配置できるという問題 - この状況を確認する必要があります。

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 に答える