构建对象和数组的方法

js创建对象的6种方法

1、对象字面量方法

var person ={
     name: "qinqin",
     age: 24,
     family: ["fanfan","ningning","lingling"],
     say: function(){
          console.log(this.name);
     }
};

2、new操作符+Object创建对象

var person = new Object();
person.name = "qinqin";
person.age = 24;
person.family = ["fanfan","ningning","lingling"];
person.say = function(){
     console.log(this.name);
}

以上两种方法在使用同一接口创建多个对象时,会产生大量重复代码,为了解决此问题,工厂模式被开发。

3、工厂模式

function createPerson(name,age,family){
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.family = family;
    obj.say = function(){
       console.log(this.name)
  }
   return obj;
}

var person1 = createPerson(‘qinqin‘,24,[‘fanfan‘,‘ningning‘,‘lingling‘])
var person2 = createPerson(‘qin‘,24,[‘fan‘,‘ning‘,‘ling‘])
console.log(person1 instanceof Object); //true

工厂模式解决了重复实例化多个对象的问题,但没有解决对象识别的问题(但是工厂模式却无从识别对象的类型,因为全部都是Object,不像Date、Array等,本例中,得到的都是obj对象,对象的类型都是Object,因此出现了构造函数模式)。

4、构造函数

function Person(name,age,family){
    this.name = name;
    this.age = age;
    this.family = family;
    this.say = function(){
        console.log(this.name)
   }
}

var person1 = new Person("qinqin",24,["fanfan","ningning","lingling"]);
var person2 = new Person("qin",24,["fan","ning","ling"]);
console.log(person1.constructor);      //constructor 属性返回对创建此对象的数组、函数的引用

对比工厂模式有以下不同之处:

1、没有显式地创建对象

2、直接将属性和方法赋给了 this 对象

3、没有 return 语句

以此方法调用构造函数步骤:

1、创建一个新对象

2、将构造函数的作用域赋给新对象(将this指向这个新对象)

3、执行构造函数代码(为这个新对象添加属性)

4、返回新对象 ( 指针赋给变量person ??? )

可以看出,构造函数知道自己从哪里来(通过 instanceof 可以看出其既是Object的实例,又是Person的实例)

构造函数也有其缺陷,每个实例都包含不同的Function实例( 构造函数内的方法在做同一件事,但是实例化后却产生了不同的对象,方法是函数 ,函数也是对象)

因此产生了原型模式

5、原型模式

function Person() {
}

Person.prototype.name = "qinqin";
Person.prototype.age = 24
Person.prototype.family = ["fanfan","ningning","lingling"];
Person.prototype.say = function(){
    alert(this.name);
};
console.log(Person.prototype);   //Object{name: ‘qinqin‘, age: 24, family: Array[3]}

var person1 = new Person();        //创建一个实例person1
console.log(person1.name);        //lisi

var person2 = new Person();        //创建实例person2
person2.name = "qin";
person2.family = ["fan","ning","ling"];
console.log(person2);            //Person {name: "qin", family: Array[3]}
// console.log(person2.prototype.name);         //报错
console.log(person2.age);              //24

原型模式的好处是所有对象实例共享它的属性和方法(即所谓的共有属性)

6、混合模式(构造函数+原型模式)

function Person(name,age,family){
    this.name = name;
    this.age = age;
    this.family = family;
}

Person.prototype = {
    constructor: Person,  //每个函数都有prototype属性,指向该函数原型对象,原型对象都有constructor属性,这是一个指向prototype属性所在函数的指针
    say: function(){
        console.log(this.name);
    }
}

var person1 = new Person("qinqin",24,["fanfan","ningning","lingling"]);
console.log(person1);
var person2 = new Person("you",21,["fan","ning","ling"]);
console.log(person2);

js创建数组的方法

1、字面量创建数组

var arr = [];
arr[0]=‘a‘;
arr[2]=‘c‘;
console.log(arr,arr.length)

2、new操作符+Array

var arr = new Array()
arr[0]=1;
arr[1]=10;
console.log(arr)

一般使用字面量创建数组的方法

数组常用的方法eES1998(es3.0)

1、改变原数组(push,pop,shift,unshift,sort,reverse,splice)

push:往数组的最后一位添加数据,并返回数组的长度

模仿系统的push方法

var arr = [1,2,3]
Array.prototype.push = function(){
    for(var i = 0; i < arguments.length; i++){
        this[this.length] = arguments[i]
    }
    return this.length;
}

pop:把数组的最后一位剪切,并返回被剪切的元素

unshift:往数组的前面添加数据,并返回数组长度

shift:把数组的第一位剪切,(不传参数,传了也没有用)并返回被剪切的元素

sort:数组排序

var arr = [1,10,3,4,6]
//1、必须写两个参数
//2、看返回值 1)当返回值为负数时,那么前面的数放在前面
//                 2)为正数,那么后面的数在前面
//                 3)为0,不动
arr.sort(function(a,b){
     return a-b    //升序
})
arr.sort(function(a,b){
     return b-a    //降序
})

reverse:逆转数组的顺序

splice:arr.splice(从第几位开始,截取多少的长度,在切口处添加新的数据) 第一位传负数,表示倒数第一位

2、不改变原有数组(concat,join,split(是字符串的方法,写在这里是为了和join相比较),toString,slice)

concat:连接两个数组

slice:截取数组,取头不取尾

join:把数组分割成字符串,arr.join()如果括号不传东西,按逗号隔开;arr.join(‘‘)直接拼接字符串

数组新增的方法(es5.0) ES2009

2个索引方法:indexOf() 和 lastIndexOf();

5个迭代方法:forEach()、map()、filter()、some()、every();

forEach()没有return

let arr = [‘apple‘,‘orange‘,‘tomato‘]
arr.forEach(function(item,index,arr){
       console.log(item,index,arr)
})

map()非常有用,做数据的交互‘映射’,正常情况下,需要配合return,返回是一个新数组,可以任意修改成自己想要的格式。若没有return,相当于forEach。

let arr = [‘apple‘,‘orange‘,‘tomato‘]
let arr1 =  arr.map(function(item,index,arr){
     var json = {
          name:item
     }
     return json;
})

filter()过滤,过滤一些不合格‘元素’,如果回调函数返回true,就留下来

 let arr = [{title:‘aaa‘,grade:1},
                {title:‘bbb‘,grade:1},
                {title:‘ccc‘,grade:3},
                {title:‘eee‘,grade:2}]
 let arr1 =  arr.filter(function(item,index,arr){
      return item.grade == 1
})

some()类似查找,数组里面某一个元素符合条件,返回true

every()数组里面所有的元素都符合条件,返回true

注意:平时只要用map(),一定要有return

2个归并方法:reduce()、reduceRight();

 let arr = [1,2,3,4,5,6]
    let arr1 =  arr.reduce(function(prev,cur){
       return prev + cur
})

 es6.0新增的方法ES2015

for…of…

arr.keys()数组下标

arr.entries()数组某一项

 let arr = [‘apple‘,‘b‘,‘city‘]
for(let [key,val] of arr.entries()){
        console.log(key,val)
}

Array.from()用于类似数组的对象(即有length属性的对象)和可遍历对象转为真正的数组。

Array.of()将一组值转变为数组。

find()和findIndex()用于找出第一个符合条件的数组成员。参数是个回调函数,所有数组成员依次执行该回调函数,直到找到第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,就返回undefined;可以接收3个参数,依次为当前值、当前位置、原数组。

 es7.0新增的方法ES2016

includes()表示某个数组是否包含给定的值,如果包含则返回 true,否则返回false。可以接收两个参数:要搜索的值和搜索的开始索引。当第二个参数被传入时,该方法会从索引处开始往后搜索(默认索引值为0)。若搜索值在数组中存在则返回true,否则返回false。

tips:includes与indexOf的区别是:前者返回布尔值(利于if条件判断),后者返回数值。

类数组

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
}

原文地址:https://www.cnblogs.com/yqyf/p/12488510.html

时间: 2024-11-02 04:24:19

构建对象和数组的方法的相关文章

判断是对象还是数组的方法

一些数组的基础知识,感觉很有意思 通过typeof是无法判断是对象还是数组的 第一:使用instanceof进行判断,A instanceof B即对象A是不是构造函数B构造出来的,是即返回true, 不是即返回false. 第二:在typeof上进行enhancement, typeof数组和对象返回都是object, 但是数组的长度为0及0以上的整数,object的长度为undefined. 方法三:利用Object.prototype.toString.call()方法将该变量转化为代表其

JS中判断对象是不是数组的方法

JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Array的对象就不起作用了. 利用typeof除了array和null判断为object外,其他的都可以正常判断 alert(typeof null); // "object" alert(typeof function () { return 1; }); // "function&

对象和数组的方法

对象使用各个方法的返回值,,,对原对象的影响(改变or是不变) /* var box = ['李炎恢', 28, '盐城', new Date()]; alert(box); alert(box.toString()); alert(box.valueOf()); alert(box.toLocaleString()); //本地格式区域字符串 var box = ['李炎恢', 28, '盐城']; alert(typeof box.join('|')); //方法运行过后返回按|分割的字符串

Java-第十四章-代参的方法(二)-编程实现,输入班里10名学生的身高,获得身高最高的学生要求对象数组类型方法

package com.ww.yzpA; public class Students { int No; int Height; } package com.ww.yzpA; public class Height { public Students getMaxHeigth(Students[] str) { Students A = new Students(); for (int i = 0; i < str.length; i++) { if (str[i].Height > A.He

让NSArray数组中每个对象都调用的方法

1. [array valueForKey:@"title"]; //Returns an array containing the results of invoking valueForKey: using key on each of the array's objects. 使数组中的每个对象都调用valueForKey:方法,并且将每个对象调用方法的结果依次存入一个新的数组中,然后返回 2. [self  setValuesForKeysWithDictionary:dict

mustache 获取json数据内数组对象指定元素的方法

由于最近项目再用mustache,因此发现了这个问题,mustache无法获取json数据内数组键值的指定索引的元素 遂上网查资料总结一下两种方法 1,数据为数组对像 var obj = [{name: 'foo'}, {name: 'bar'}]; var tmp = '{{#1}}{{name}}{{/1}}'; console.log(Mustache.render(tmp, obj)); //bar 这种方法个人觉得有一定局限性 -----参照:http://stackoverflow.

spring mvc 控制器方法传递一些经验对象的数组

由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstructor方法来获得构造函数, 可是一直报NoSuchMethodException的异常. 依据这种方法的jdk文档,这个类是一个数组对象时,这种方法会抛出java.lang.NoSuchMethodException,由于接口.数组类.void.基本类型没有构造函数. 同事后来给我支了两招,使用A

js数组对象以及数组常用属性和方法

定义形式: var  arr1 = new Array(1,  5,  8,  7,  2,  10);  //定义了一个数组,其中具有6个数据 var  arr2 = new Array();                   //只是单纯地定义了一个数组(名),但没有给值(数据),即现在是空的 var  arr3 = [1,  5,  8,  7,  2,  10];  //同arr1,只是一种简写的定义法. var  arr4 = [ ];                  //同arr

08.18 javascript 06 数组 数组的概念 创建数组 读取数组中的元素 稀疏数组 添加和删除数组的元素 数组遍历 多维数组 数组的方法 类数组对象 作为数组的字符串

# 数组 ### 数组的概念 * 数组是值的有序集合 * 数组中的每个值 称之为 元素 * 每个元素可以是任意数据类型的值 * 每个元素都有索引(下标) * 元素的索引从0开始,按照顺序递增. 元素最大的索引 2^32-2 ### 创建数组 * 直接量 `[]` * 构造函方式  `new Array()` ### 读写数组中的元素 * 数组名[索引] ### 稀疏数组 * js数组的索引是连续的 * 没有连续的给元素赋值 , 没有赋值的元素会自动赋值 undefined ### 添加和删除 数