js配列とクラス配列


配列の定義:


[]にカンマで区切り、配列、アルファベット、文字列、undefinedなど、任意の値を書き込むことができます.配列要素:配列にアクセスされたデータ;配列長:配列要素の個数配列インデックス(下付き):配列内のデータを格納およびアクセスするために使用されます.0位から1.配列は、var arr=[];配列文字数,[]のデータはカンマで区切られ(まばらな配列)、カンマを書くとundefinedが表示されます.
var arr = [1,2,,,,3,4];
          undefined,   ——[1,2,3,undefined,undefined,unfined,3,4]
    arr.length——7

2.コンストラクション関数による配列の作成:var arr=new Array()
var arr = new Array(10);
                       

配列の読み取りと書き込み:
①arr[num]//オーバーフローして読んではいけません.そうしないとundefinedになります.eg: var arr = [ ]; arr[10] ——undefined ②arr[num] = xxx;//オーバーフロー可能eg:`var arr=[];arr[10] = ‘abv’;11番目のビットに値を割り当て、arrにアクセスします.[undefined*10,abv]

配列の一般的なメソッド(配列のすべてのメソッドはArr.prototypeに由来):


1.元の配列を変更可能(元の配列を変更可能な方法は7つ)
①.push()配列の最後のビットにデータを追加し、同時に複数のビットを追加できます.
       push: var arr = [1,2,3];
Arr.prototype.push = function (){
	for(var i = 0;i < arguments.length;i++){
		this[this.length] = arguments[i];
	}
	return this.length;
}

②.pop()配列の最後の1つを切り取り、パラメータを伝達しない.
var arr = [1,2,3];
arr.pop();//  ,     
  arr——[1,2]
var num = arr.pop();//         num 
num——3//  num

③.unshift()は配列の前にデータvar arr = [1,2,3];arr.unshift(0,1);を追加してarrを表示する-[0,1,2,3]④.shift()は配列の前に要素を削除して返し、var arr = [1,2,3]; arr.shift()-->[2,3]を切り取る.⑤.reverse()は元の配列を逆にvar arr = [1,2,3]; arr.reverse()-->[3,2,1]⑥とする.splice()スライス方法;arr.splice(負の数から始まると逆数の数番目)は、どのくらいの長さを切り取り、切り口に新しいデータを追加するか)配列が内部でどのように順序を正しますか(-1は逆数の1位、+1は2位)pos+=pos>0?0 : this.length
var arr = [1,2,3,4,5];
arr.splice(1,2)//  [2,3]
       [1,4,5]

var arr = [1,2,3,5];
arr.splice(3,0,4)//     ,                 
[1,2,3,4,5]

⑦.sort()は配列を昇順に並べ替え(自分でルールを変更できる)、
var arr = [5,4,3,2,1];
arr.sort();
console.log(arr);——[1,2,3,4,5]

var arr = [1,3,5,4,10];
arr.sort()   [1,3,4,5,10]
   [1,10,3,4,5],  ascII    

自分でルールを変更できます:var arr=[2,10,20,13,4,8,9];//比較昇順ルール:1.2つの値を書く必要があります.戻り値returnを見る:①戻り値は負数前に置く②負数、後の数前に置く③0不動
arr.sort(function(a,b){
	if(a > b){
		return 1;//  
	}else{
		return -1;//  
	}
})
   :arr.sort(function(a,b){
	return a - b;//  :a-b   a > b,a-b   a

2.元の配列を変更しない
①.concat()は2つの配列を接続し、結果を返して元の配列を変更しません.
var arr = [1,2,3];
var arr1 = [4,5];
arr.concat(arr1);——[1,2,3,4,5]

②.toString()は配列を文字列にして結果var arr = [1,2,3]; arr.toString()-123③を返す.splice()メソッドsplice(ビットから切り取り、ビットに切り取る)の2つのパラメータ.1つのパラメータの場合(何番目から最後まで切り取ります);パラメータなし(全体を切り取る)
var arr = [1,2,3,4];
var newArr = arr.splice()//      ——[ ]

④.join()どのパラメータを渡すかはパラメータで配列内のデータを接続し、文字列形式のvar arr = [1,2,3,4,5]; arr.join("-")--「1-2-3-4-5」⑤.split()を伝えるvar arr = [1,2,3,4,5,6]; arr.split("4")——[「1-2-3-」、「5-6」④と⑤を可逆的に分割する

クラス配列


Argumentsはクラス配列1である.属性名の擬似配列の特性2を利用することができる.動的にlengthプロパティ3を成長させることができます.クラス配列にpushメソッドを強制的に呼び出すと、length属性値の位置に基づいて属性の拡張が行われます.
★クラス配列の構成部分:属性がインデックス属性であるにはlength属性が必要であり、pushを加えたほうがよい
メリット:配列とオブジェクトの特性をつなぎ合わせるが、すべてが
var obj = {
	"0" : 'a',
	"1" : 'b',
	"2" : 'c',
	"length" : 3,
	"push" : Array.prototype.push,
	"splice" :Array.prototype.splice
}
  obj——["a","b","c"]

はいれつデポジット
var arr = [1,1,1,2,2,2,3,3,3];
Array.prototype.unique = function(){//      unique
	var temp = {},//     
		  arr = [],//     
		  len = this.length;
	for(var i = 0; i < len;i++){//      
		if(!temp[this[i]]){//         ,       
			temp[this[i]] = 'abc';//                 ;      ,      
			arr.push(this[i]);//         
		}
	}
	return arr;//     
}

バブルソート
           
var arr = [5,4,3,2,1];
for(var i = 0;i < arr.length - 1;i++){//         
	for(var j = 0;j < arr.length -1 - i;j++){
		if(arr[j] > arr[j + 1]){
			var temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}
}
console.log(arr);——[1,2,3,4,5]

例題:アリババ
var obj = {
	"2" : "a",
	"3" : "b",
	"length" : 2,
	"push" : Array.prototype.push
}
obj.push("c");
obj.push("d");
  obj——["2": "c", "3" : "d",length : 4]
       
Array.prototype.push = function(target){       
	//this[obj.length] = taget;
	obj[obj.length] = target;
	//this.length++;
	obj.length++;
}

ケース:typeofメソッドをカプセル化し、元の値と参照値を正確に識別します.
function typeof(target){
	var ret = typeof(target);
	var template = {
		"[object Array]" : "array",
		"[object Object]" : "object",
		"[object Number]" : "number - Object",
		"[object Boolean]" : "boolean - Object",
	    "[object String]" : "string - Object"
	}
	if(target === null){
		return "null";
	}else if(ret === "object"){//   
		var str = Object.prototype.toString.call(target);
		return template[str];
	}else{
		return ret;//   
	}
}

配列の例:配列を反転
var arr = [1,2,3,4,5,6];
for(var i = 0;i <= arr.length/2; i++){//          ,            
	var temp = arr[i];//              
	arr[i] = arr[arr.length - 1 - i];
	arr[arr.length - 1 - i] = temp;
}
console.log(arr);

配列例:配列内の各要素を|で接続して文字列出力を構成する
var names = ["apple","banana","origin","pron"];
var str = " ";
for(var i = 1;i < names.length;i++){
	str += "|" + names[i];
}
console.log(names[0] + str);//        

配列の重複する0を取り除き、他のデータを新しい配列に配置します.
var arr = [1,2,0,3,0,4,5,0,0,6];
var newArray = [];//        0 
for(var i = 0; i < arr.length;i++ ){
	if(arr[i] != 0){
		newArray[newArray.length] = arr[i];//             ,           
	}
}
console.log(newArray);

配列のケース:ユーザーにクラスの人数を入力するように提示して、総成績を求めて、平均値、最大値、最小値
var perCount = parseInt(prompt("       "));//               
var scores = [];//          
for(var i = 0;i < perCount;i ++){//        
	//             
	scores[scores.length] = parseInt(prompt("     + (i + 1) +      :"));
}
//    ,   ,   ,   
var sum = 0;//   
var avg = 0;//   
var max = scores[0];//   
var min = scores[0];//   
for(var i = 0;i <= scores.length;i++ ){
	sum += scores[i];
	if(max < scores[i]){
		max = scores[i];
	}
	if(min > scores){
		min = sores[i];
	}
}
avg = sum / scores.length;
console.log("   :" + sum);
console.log("   " + avg);
console.log("   " + max);
console.log("   " + min);