JavaScript配列の特性と実践応用が深くて詳しいです.

6438 ワード

本論文の実例はJavaScript配列特性と実践応用を述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
JavaScriptは、配列の下を文字列にしてオブジェクトの属性として表示する配列特性に類似するオブジェクトを提供します.本物の配列より遅いですが、使いやすいです.
1配列の文字数
配列の文字数は、ゼロまたは複数のコンマで区切られた値を囲む表式です.

var empty = [];
var numbers = [
  'zero', 'one', 'two', 'three'
];
console.log(empty[1]);//undefined
console.log(numbers[1]);//one
console.log(empty.length);//0
console.log(numbers.length);//4

配列オブジェクトはArray.prototypeから継承されているので、numbersは多くの有用な方法を継承している.
JavaScriptは、配列が任意の混合タイプの値を含むことを許可しています.

var misc = [
  'string', 11.3, false, true, null, undefined, ['nested', 'array'], {object: true}, NaN, Infinity
];
console.log(misc.length);//10

2の長さ
配列にはlength属性がありますが、上界はありません.現在のlengthに等しい数字を下付きとして元素を保存すると、length属性値が大きくなり、新しい元素を収容できるようになります.配列越境現象は発生しません.
length属性の値は非常に奇妙であり、配列の最大整数属性名に1を加える.つまり、配列の要素数に必ずしも等しくない.

var myArray = [];
console.log(myArray.length);//0
//myArray        ,  length                   1
myArray[100000] = true;
console.log(myArray.length);//100001

[]後の演算子は、その表現を文字列に変換します.表現にtoString()の方法があると呼び出されます.この文字列は属性名として扱われ、この文字列が現在のlength値に大きく、4294967295より小さい正の整数である場合、この配列のlengthは新たな下付き加算1にリセットされる.
lengthの値を直接設定できます.より大きなlength値を設定すると、配列により多くの空間が割り当てられません.lengthを小さくすると、すべての下付きが新しいlengthに等しい属性が削除されます.

//    
numbers.length = 3;
console.log(numbers);//[ "zero", "one", "two" ]

下付き文字を配列として指定する現在のlengthは、新しい要素を配列の末尾に付加することができます.

//    
numbers[numbers.length] = 'four';
console.log(numbers);//[ "zero", "one", "two", "four" ]

push()を使用すると、同じ機能をより便利に実現することができる.

//    (push)
numbers.push('good');
console.log(numbers);//[ "zero", "one", "two", "four", "good" ]

3削除
JavaScript配列はオブジェクトですので、要素をdeleteで除去できます.

delete numbers[2];
console.log(numbers);//[ "zero", "one", <1        >, "four", "good" ]

残念なことに、これは配列の中に空洞を残します.私たちが望むのは、削除された要素の後の要素が自動的に前に移動します.
JavaScript配列は、下記のパラメータ:①.配列のインデックスを受け入れるsplice()方法を提供しています.②.削除する要素の個数.③他のパラメータ(複数)-これらのパラメータを索引の位置に順次挿入します.

//         ,              
numbers.splice(2, 1);
console.log(numbers);// [ "zero", "one", "four", "good" ]

4列挙
JavaScript配列はオブジェクトですので、配列のすべての属性をfor in文で巡回できます.しかし、for in文では属性の順序が保証されず、プロトタイプチェーンから意外な属性が得られます.
forを使用して上記の問題を避けることができます.

var i,
  myArray = numbers;
for (i = 0; i < myArray.length; i += 1) {
  console.log(myArray[i]);
}

5配列とオブジェクト
この二つの中でどうやって選択しますか?属性名が小さくて連続する整数の場合、配列を使用します.オブジェクトを使用します.
JavaScriptのtypeofは配列がobjectと考えられます.これは意味がありません.
行列を検出する関数を定義できます.

var is_array = function (value) {
  return value && typeof value === 'object' &&
    value.constructor === Array;
};

この方法は、異なるウィンドウやフレーム内の配列が失敗します.だから、これより良い方法を使ってください.

var is_array = function (value) {
  return Object.prototype.toString.apply(value) === '[object Array]';
};
console.log(is_array(myArray));//true

6つの方法
JavaScriptは、Array.prototypeに格納された配列に対して利用可能ないくつかの方法を提供する.配列の計算方法を増加させることができます.

//                  
Array.method('reduce', function (f, value) {
  var i;
  for (i = 0; i < this.length; i += 1) {
    value = f(this[i], value);
  }
  return value;
});

このようにすべての配列がこの方法を継承している.関数と初期値はパラメータとして受け入れられます.そして配列を巡回し、関数で新しい値を計算し、最後にこの値を返します.

//      
var data = [9, 16, 32, 192, 8];
//         
var add = function (a, b) {
  return a + b;
};
var mult = function (a, b) {
  return a * b;
};
console.log(data.reduce(add, 0));//257
console.log(data.reduce(mult, 1));//7077888

配列はオブジェクトですので、直接配列に追加することもできます.

data.total = function () {
  return this.reduce(add, 0);
};
console.log(data.total());//257

文字列「total」は整数ではないので、配列のlength値は変わりません.属性名が文字列の場合、配列の属性となります.
7初期値を指定します
新しい配列を使用すると、空になります.これは訪問すればundefinedが得られます.配列要素値を初期化できる方法を実現できます.

//           
Array.dim = function (dimension, initial) {
  var a = [], i;
  for (i = 0; i < dimension; i += 1) {
    a[i] = initial;
  }
  return a;
};
//     10   0    
var myArray = Array.dim(10, 0);
console.log(myArray);//[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]

JavaScript配列の要素は配列とすることができ、このように多次元配列機能を実現する.

//     
var matrix = [
  [0, 1, 2], [3, 4, 5]
];
console.log(matrix[1][0]);//3

行列を初期化できるようにAray法を拡張できます.

/**
 *
 * @param m      
 * @param n      
 * @param initial    
 */
Array.matrix = function (m, n, initial) {
  var a, i, j, mat = [];
  for (i = 0; i < m; i += 1) {
    a = [];
    for (j = 0; j < n; j += 1) {
      a[j] = initial;
    }
    mat[i] = a;
  }
  return mat;
};
//   0     4*4   
console.log(Array.matrix(4, 4, 0));
//      
Array.identity = function (n) {
  var i, mat = Array.matrix(n, n, 0);
  for (i = 0; i < n; i += 1) {
    mat[i][i] = 1;
  }
  return mat;
};
var myMatrix = Array.identity(4);
console.log(myMatrix);
console.log(myMatrix[3][3]);//1

興味のある友達はまた、この駅のオンラインHTML/CSS/JavaScriptコードを使ってツールを実行できます.http://tools.jb51.net/code/HtmlJsRun上記コードの実行結果をテストします.
さらに、JavaScriptに関する内容については、当駅のテーマを見ることができます.「JavaScript配列操作技術まとめ」、「JavaScript文字と文字列操作技術まとめ」、「JavaScript巡回アルゴリズムとテクニックまとめ」、「JavaScript検索アルゴリズム技術まとめ」、「JavaScript数学計算方法まとめ」、「JavaScriptデータ構造とアルゴリズムと技術まとめ」「JavaScriptエラーとデバッグテクニックのまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.