`

javascript中数组、对象

 
阅读更多
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数组其实是将下标的数字转化成字符串,然后将这个字符串作为“数组”对象的属性来进行存取的。说白了,在存取属性上,它跟其他的对象并无二致。Array作为Object,接受key-value序列赋值时,只有当key可转为正整数,才有可能对length进行修改。用一个for..in就可以看到了。JavaScript的数组本质上还是键-值这样的形式(本质上就是一个对象),而不是一个连续的内存块(C/Java中都是连续的),而是一个散列表。
以下是两种实现数组删除元素的方式:
//法一:
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提供的一个内部对象,它是一个标准的集合,我们可以添加(push)、删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里还可以有别的集合吗?

对象
由于JavaScript的语言特性,我们可以向通用对象动态添加和删除属性。所以Object也可以看成是JS的一种特殊的集合。
对象可以有属性,对象的属性可以是另外的对象;JavaScript对象的本身就是一个字典(dictionary),或者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

下面比较一下Array和Object的特性:
Array:
新建:var ary = new Array(); 或 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]);
}

/**
* 总结:其实为对象赋属性值与读取对象的属性值是同样的操作,
* 关键是:如何灵活多变的访问对象的属性
*/
分享到:
评论

相关推荐

    javascript中的数组对象以及json学习笔记

    在JavaScript中,数组对象和JSON(JavaScript Object Notation)是两种非常重要的数据结构,它们在处理和存储数据方面起着核心作用。这篇学习笔记将深入探讨这两种数据结构的特性和用法。 首先,我们来了解...

    JavaScript类数组对象转换为数组对象的方法实例分析

    本文实例分析了JavaScript类数组对象转换为数组对象的方法。分享给大家供大家参考,具体如下: 1、类数组对象: 拥有length属性,可以通过下标访问; 不具有数组所具有的方法。 2、为什么要将类数组对象转换为数组...

    JavaScript 中有关数组对象的方法(详解)

    以上就是JavaScript中数组对象的一些主要方法,熟练掌握这些方法能极大地提升你在处理数组数据时的效率和代码的简洁性。在实际编程中,根据具体需求灵活运用这些方法,可以实现各种复杂的数组操作。

    js解析php数组对象数组对象数组对象.docx

    ### JavaScript 解析 PHP 数组对象 #### 一、概述 在 Web 开发中,JavaScript 和 PHP 是两种非常重要的编程语言。PHP 主要用于服务器端的数据处理与逻辑控制,而 JavaScript 则负责客户端的交互和数据展示。在实际...

    Javascript实现数组中的元素上下移动

    我们交换数组可以实现元素上下移动了,这个效果我们在表格或以前排序算法中都会用到,下面来看一个JavaScript下实现交换数组元素上下移动例子 在写项目的时候,要实现一个数组记录上下移动的示例。写起来也没有没...

    js获取对象,数组所有属性键值(key)和对应值(value)的方法示例

    下面是示例代码的详细解释,它演示了如何获取数组对象的键和值: ```javascript // 定义一个包含多个对象的数组 var slideArray = [ { imgsrc1: "a.jpg" }, { imgsrc2: "b.jpg" }, { imgsrc3: "c.jpg" }, { ...

    JavaScript数组对象Array案例.pdf

    本文将深入探讨JavaScript数组对象Array的一些关键知识点,并通过提供的案例进行解析。 首先,数组的创建有多种方式。最常见的是使用`new Array()`构造函数,如`var arr = new Array(1, 2, 3, 4, 5, 6)`,这会创建...

    JavaScript数组对象方法.xmind

    JavaScript数组对象方法.xmind

    JS数组中对象去重操作示例

    - 检查当前对象的`magicId`,如果它还没有在`full`对象中出现过,继续检查`id`。 - 如果`id`也没有出现过,创建一个新的对象,复制当前对象的`id`和`magicId`到新对象,并将新对象添加到`result`数组中。 - 将...

    JavaScript【数组和对象(1)】

    数组和对象是JavaScript中的基本数据结构,它们用于存储和处理数据。本篇将详细阐述JavaScript中的数组和对象。 一、数组 数组是有序的数据集合,可以存储任意类型的值,包括数字、字符串、对象等。在JavaScript中...

    JavaScript对象数组排序函数及六个用法

    为了应对不同场景下的排序需求,本文将介绍一个自定义的JavaScript函数,该函数支持对数组或对象进行排序,并且能够根据数组或对象中嵌套的任意深度的子键进行排序。以下是对该函数及其使用方法的详细解析。 函数...

    JavaScript数组对象JSON学习笔记

    ### JavaScript 数组对象 JSON 学习笔记 #### 一、JavaScript 数组操作 在 JavaScript 中,数组是一种常用的数据结构,用于存储多个值。本部分主要介绍如何创建数组、访问数组元素以及对数组进行各种操作。 #####...

    使用JavaScript数组模拟Java的Hashtable集合

    在讲授JavaSript课程第七章时,发现课件中没有把JavaScript的数组讲清楚。因为,JavaScript的数组非常特殊,...注:本示例代码注释非常详细,请仔细阅读体会JavaScript数组的奇特用法,以及对象的构造方法的书写格式。

    JavaScript中数组的一些算法和技巧总结

    - 使用`Array.from()`和`Array.of()`将非数组对象转换为数组。 - ES6新增的解构赋值可以在数组操作中提高代码可读性,例如:`[first, ...rest] = arr;` 4. 性能优化 - 当需要处理大量数据时,考虑使用`for`循环...

    【JavaScript源代码】javascript类数组的深入理解.docx

    JavaScript中的类数组对象,也称为伪数组,是与标准数组类似但不完全符合数组特性的对象。它们在结构上相似,具有`length`属性,可以使用`for`循环进行遍历,但不拥有数组的内置方法,比如`push`, `slice`, `concat`...

    Javascript数组及其操作

    在 Javascript 中,可以使用三种方式创建数组: 1. 单纯创建数组:`var arr = new Array();` 2. 创建数组的同时规定数组大小:`var arr = new Array(10);` 3. 直接初始化数组:`var arr = new Array("love", "hate...

Global site tag (gtag.js) - Google Analytics