javascriptの配列、オブジェクト

7936 ワード

javascript配列操作大全書:
//shift:        ,         ;         undefined 
var a = [1,2,3,4,5]; 
var b = a.shift(); //a:[2,3,4,5] b:1

//unshift:           ,         
var a = [1,2,3,4,5]; 
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7 
 : IE6.0        undefined,FF2.0       7,             ,         splice        

//pop:         ,         ;         undefined 
var a = [1,2,3,4,5]; 
var b = a.pop(); //a:[1,2,3,4] b:5

//push:           ,         
var a = [1,2,3,4,5]; 
var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7

//concat:       ,               
var a = [1,2,3,4,5]; 
var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]

//splice(start,deleteCount,val1,val2,...): start      deleteCount ,        val1,val2,... 
var a = [1,2,3,4,5]; 
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4] 
var b = a.splice(0,1); // shift 
a.splice(0,0,-2,-1); var b = a.length; // unshift 
var b = a.splice(a.length-1,1); // pop 
a.splice(a.length,0,6,7); var b = a.length; // push

//reverse:      
var a = [1,2,3,4,5]; 
var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]

//sort(orderfunction):             ,sort          ,          
var a = [1,2,3,4,5]; 
var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]

//slice(start,end):                             
var a = [1,2,3,4,5]; 
var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]

//join(separator):             , separator    ,                
var a = [1,2,3,4,5]; 
var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"
JavaScriptの配列では、数字の下付きは最終的に解釈器によって文字列に変換されます.つまり、数字の下付きは数字を見ているだけで、実際には文字の属性名です.JavaScriptでは、数字の下付き文字列の下付き文字列はすべて「JavaScript配列」という特殊なオブジェクトの属性です.
var array=「first」「second」「third」  
print(array["0])///文字列0を下付きとする  
print(array[0])//数字0を下付きとする  
彼らは同じ結果を得ることができます.いずれもfirstです.
JavaScript配列は、実際には下付きの数字を文字列に変換し、この文字列を配列オブジェクトの属性としてアクセスします.はっきり言って、アクセス属性は他のオブジェクトと同じです.ArayはObjectとして、key-valueシーケンスの割り当てを受ける場合、keyが正の整数に変換できる場合にのみ、lengthを修正することができる.for.in一つで見られます.JavaScriptの配列は本質的にはまだキー値であるという形(本質的にはオブジェクトである)で、連続メモリブロック(C/Javaでは連続している)ではなく、一つのハッシュリストである.
配列削除要素を実現する2つの方法は以下の通りです.
//  :
Array.prototype.remove = function(from, to) {   
    var rest = this.slice((to || from) + 1 || this.length);   
    this.length = from < 0 ? this.length + from : from;   
    return this.push.apply(this, rest);   
};
var array = ["one", "two", "three", "four", "five", "six"];    
array.remove(0);//           two,three,four,five,six   
array.remove(-1);//             two,three,four,five   
array.remove(0,2);//        0-2   (3 )    five
//  :
Array.remove = function(array, from, to) {   
    var rest = array.slice((to || from) + 1 || array.length);   
    array.length = from < 0 ? array.length + from : from;   
    return array.push.apply(array, rest);   
};
var array = ["one", "two", "three", "four", "five", "six"];   
Array.remove(array, 0, 2);//  0, 1, 2       
Array.prototype.remove        ,    ,       Array      remove  (   ), Array.remove   Array       ,          。
配列の繰り返し:
//Array             ,             ,       :
function unique(arr) {
    var result = [], isRepeated;
    for (var i = 0, len = arr.length; i < len; i++) {
        isRepeated = false;
        for (var j = 0, len1 = result.length; j < len1; j++) {
            if (arr[i] == result[j]) {   
                isRepeated = true;
                break;
            }
        }
        if (!isRepeated) {
            result.push(arr[i]);
        }
    }
    return result;
}
//                    ,                 ,        。          ,        。       hashtable          ,           。  , Javascript   hashtable      ,    :
function unique(arr) {
    var result = [], hash = {};
    for (var i = 0, elem; (elem = arr[i]) != null; i++) {
        if (!hash[elem]) {
            result.push(elem);
            hash[elem] = true;
        }
    }
    return result;
}
配列はJavaScriptが提供する内部オブジェクトであり、標準的な集合であり、中の要素を追加したり、削除したりすることができます.また、forサイクルを通して中の要素を遍歴することができます.それでは配列以外にもJavaScriptの中に他の集合がありますか?
オブジェクト
JavaScriptの言語特性のために、共通のオブジェクトに属性を動的に追加し、削除することができます.だからObjectはJSの特殊な集合とも見なされる.
オブジェクトに属性があります.オブジェクトの属性は別のオブジェクトでもいいです.JavaScriptオブジェクト自体が辞書であるか、またはJava言語のMapであるか、関連配列と呼ばれるか、すなわちキーによってオブジェクトに関連しているか、このオブジェクト自体がオブジェクトでもあり、この定義により、JavaScriptオブジェクトは任意の複雑なデータ構造を表すことができることが分かります.属性はキーペアからなります.属性の名前と属性の値です.属性の名前は文字列で、値は任意のJavaScriptオブジェクト(JavaScriptのすべてのオブジェクトは関数を含む)です.例えば、オブジェクトを宣言します.
var object = {   
    field : "self",   
    getField : function(){   
       return this.field;   
    },   
    outter:{   
       inner : "inner text",
       field : "inner field",   
       getInfo : function(){   
           return this.inner + " and " +  this.field;   
       }   
    }   
}   
alert(object.getField());  //  self
alert(object.outter.getInfo()); //  inner text and inner field
次にArayとObjectの特性を比較します.
Aray:
新規:var ary=new Aray()またはvar ary=[];
追加:ary.push(value);
削除:delete ary[n]//本当の意味での削除ではなく、n番目の操作をundefinedとして行います.配列の長さは変わりません.
巡回:for(var i=0;i<ary.length;i++)ary[i];またはfor(var item in obj)obj[item](for inを使用することを推奨しません)for inは配列のすべての属性を遍歴しますので、lengthを使って配列の有効項目にのみアクセスします.(属性は数字に変換できます.)下付きが数字ではないものにはアクセスしません.
Object:
新規:var obj=new Object()またはvar obj={}
増加:obj[key]=value;(keyはstring)
削除:delete obj[key]或いはdelete obj.name;
巡回:for(var key in obj)obj[key]
オブジェクト操作:
/**
 *     
*/
//     :       
var obj = new Object();
//     :       
var obj1 = {};
//     :       ,       
var obj2 = {
  name:"JACK",
  age:23
};
 
/**
 *        
*/
//     :   .   
obj.name = "Jack";
obj.age = 23;
//   :  []
obj["sex"] = "F";
var k = "aaa";obj[k] = "p";//       
//   :    ,     
for(var i=0; i<10; i++){
  obj["kind"+i] = i;
}
//   :  eval()  
var hello = "heihei";eval("obj.no="+"hello");
eval("obj.no2=3");
 
/**
 *        
*/
//     :    
var name = obj.name;
var age = obj.age;
//     :    
var sex = obj["sex"];
var k = "aaa";var aaa = obj[k];//       
//     :    ,     
for(var i=0; i<10; i++){
  var ii = obj["kind"+i];alert(ii);
}
//     :  eval()  
var no = eval("obj.no");
var k = "no";var no2 = eval("obj." + k + 2);
var kind2 = eval("obj.kind"+2);
var k = "kind";var kind3 = eval("obj."+k+3);
 
alert("name=="+name);
alert("age=="+age);
alert("sex=="+sex);
alert("aaa=="+aaa);
alert("no=="+no);
alert("no2=="+no2);
alert("kind2=="+kind2);
alert("kind3=="+kind3);
 
/**
 *          
*/
delete obj["name"];
 
/**
 *          
*/
for(var key in obj){
  alert("   :" + key + "      :" + obj[key]);
}

/**
*   :                        ,
*    :              
*/