JS中的 Array 类是否有 add方法

JavaScript029

JS中的 Array 类是否有 add方法,第1张

JavaScript中的Array类型很灵活,和C语言不同,同一个Array每个位置可以存储不同的变量类型,而且数组长度可变。

声明数组的方法:

var colors = new Array()

var colors = new Array(20) //长度为20的数组

var colors = new Array("red","blue","green")

var colors = ["red","blue","green"]

var colors = Array(3)

var colors = Array("bue")

arrays.length 可以获取colors数组的长度。这个长度不是只读的,而是可变的!

var arrays = ["red","blue","green"] // 有三个元素,长度为3

arrays.length = 2 //将arrays数组长度设为2后

alert(arrays[2]) //Undefined 第三个元素为Undefined

将长度增大或者缩短之后超出原来数组长度或者小于新数组长度的部分的值为undefined

检测当前对象事都是数组的方法:

if(value instanceif Array){

}

if(Array.isArray(value)){

}

value为要检测的对象

JavaScript的数组可以当做栈来处理,也可以当做队列或者双向队列处理,甚至能把栈,队列,双向队列的特点和方法集合起来。

我们可以用下面的一些方法来对数组进行任意的插入删除操作。

栈方法:后进先出

push() :方法可以接收任意数量的参数,把他们添加到数组末尾,并返回修改后数组的长度。

pop() :方法则从数组末尾移除最后一项,减少数组的length,然后返回移除的项。

队列方法:先进先出

shift():移除数组中的第一个项并返回该项,长度减1

结合使用shift()和push()方法,可以想使用队列一样使用数组,后端添加,前端删除

Unshift():在数组前端添加任意个项并返回新数组的长度

结合使用unshift()和pop()方法,从相反的方向来模拟队列,即在数组的前端添加项,在后端移除

var colors = new Array()

var count = colors.push("red","green")

alert(count) //2

var item = colors.shift() //队列出队操作

alert(item) //"red"

colors.unshift("red") //从前边插入

重排序方法:

sort()方法:

sort在排序时都用toString把数据转换成字符串形式:

var values = [0,1,5,10,15]

values.sort()

alert(values) // 0 ,1 ,10, 15 ,5

要实现对数的排序,需要写一个比较函数:

function compare(value1,value2){

if(value1 <value2){

return -1

}else if(value1 >value2){

return 1

}else return 0

}

values.sort(compare)

reverse()方法:反转数组项的顺序

操作方法:

1、contact():基于当前数组中的所有项创建一个新数组,而不是在当前数组上直接拼接。

colors.contact(["black","yellow"]) //contact用来拼接数组,把参数数组拼接到colors的后面

2、slice():基于当前数组中的一个或多个项创建一个新数组,可接收一或两个参数,即要返回项的起始和结束位置。若参数中有一个负数,则用数组长度加上该数来确定相应的位置

var colors = ["red","blue","green"]

var colors2 = colors.slice(1) //返回从数组下标1到最后缩构成的一个数组

var colors3 = colors.slice(1,4) //

返回从数组下标1--3构成的一个数组

3、splice()方法:删除、插入、替换

删除:当splice方法指定两个参数时,color.splice(1,3)表明删除从下标1开始连续三项

插入:当splice指定三个参数:起始位置、0、插入的项,color.splice(2,0,"red","green") 表明从下标2开始插入“red”和“green”

替换:color.splice(1,2,"red","green") 表明先删除下标1开始的连续两项,在从下标1开始插入“red”和“green”

位置方法:

indexOf()方法:

colors.indexOf(value) 从数组开头开始查找value,返回value的下标,如果没找到返回-1 。在查找时要求严格查找,相当于===

lastIndexOf()方法:从数组的末尾开始向前查找

js的数组合并有三种方法,任何一种都可以做到你需要的结果,如下:

concat 方法

var arr1=[{"msg":"你也好","from":"libai"},{"msg":"我是李白,你是谁","from":"libai"}]

var arr2=[{"msg":"你好","from":"admin"},{"msg":"LOL吗","from":"admin"},{"msg":"我是系统管理员,你是李白吗","from":"admin"}]

var arr=arr1.concat(arr2)

console.log(c)//你要的结果,不改变arr1和arr2

循环遍历

var arr1=[{"msg":"你也好","from":"libai"},{"msg":"我是李白,你是谁","from":"libai"}]

var arr2=[{"msg":"你好","from":"admin"},{"msg":"LOL吗","from":"admin"},{"msg":"我是系统管理员,你是李白吗","from":"admin"}]

for(var i=0i<arr2.lengthi++){

arr1.push(arr2[i])

}

console.log(arr1)//你要的结果,但是这个是直接改变了arr1这个数组

apply方法

合并数组arr1和数组arr2,使用Array.prototype.push.apply(arr1,arr2)  or arr1.push.apply(arr1,arr2)

var arr1=[{"msg":"你也好","from":"libai"},{"msg":"我是李白,你是谁","from":"libai"}]

var arr2=[{"msg":"你好","from":"admin"},{"msg":"LOL吗","from":"admin"},{"msg":"我是系统管理员,你是李白吗","from":"admin"}]

Array.prototype.push.apply(arr1,arr2) //或者 arr1.push.apply(arr1,arr2)

console.log(arr1) //改变了arr1

思路:

1、js调用android的java代码

2、通过java代码访问通讯录

3、通过java代码访问js代码返回通讯录信息

代码:

1、js调用android的java代码

 js代码:

window.ncp.callOnJs2("click")

android代码,通过webview打开页面:

mWebview.getSettings().setJavaScriptEnabled(true) 

mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp")  

final class JavaScriptInterface {     

       public int callOnJs() {                            

          return 1000  

       }     

       public void callOnJs2(String mode) {  

         //TODO  

       }       

  }

2、通过java代码访问通讯录

/**得到手机通讯录联系人信息**/  

   private void getPhoneContacts() {  

ContentResolver resolver = mContext.getContentResolver()  

 

// 获取手机联系人  

Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null)  

 

 

if (phoneCursor != null) {  

    while (phoneCursor.moveToNext()) {  

 

    //得到手机号码  

    String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX)  

    //当手机号码为空的或者为空字段 跳过当前循环  

    if (TextUtils.isEmpty(phoneNumber))  

        continue  

      

    //得到联系人名称  

    String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX)  

      

    //得到联系人ID  

    Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX)  

 

    //得到联系人头像ID  

    Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX)  

      

    //得到联系人头像Bitamp  

    Bitmap contactPhoto = null  

 

    //photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的  

    if(photoid > 0 ) {  

        Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid)  

        InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri)  

        contactPhoto = BitmapFactory.decodeStream(input)  

    }else {  

        contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo)  

    }  

      

    mContactsName.add(contactName)  

    mContactsNumber.add(phoneNumber)  

    mContactsPhonto.add(contactPhoto)  

    }  

 

    phoneCursor.close()  

}

3、通过java代码访问js代码返回通讯录信息

mWebView.loadUrl("javascript:onSaveCallback()")