js 数组 方法
instanceof
检测一个对象是否是数组;(用来对付复杂数据类型;)
// 简单数据类型 typeof ;
A instanceof B // A是不是B造出来的;
例:
var arr = [1,2,3];
console.log(arr instanceof Array); //arr属不属于Array类型;
Array.isArray( )
Array.isArray(参数); // 判断参数是不是数组,返回布尔值;
例:
var arr = [1,2,3];
var num = 123;
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(num)); //false
toString( )
数组.toString(); // 把数组变成字符串,去除了[],内容用逗号链接;
例:
var arr = ["aaa","bbb","ccc"];
console.log(arr.toString()); //返回 aaa,bbb,ccc
valueOf( )
数组.valueOf(); //返回数组本身;
例:
var arr = ["aaa","bbb","ccc"];
console.log(arr.valueOf()); //返回数组本身 ["aaa","bbb","ccc"]
数组.join(参数)
数组.join(参数); // 数组中的元素可以按照参数进行链接变成一个字符串;
console.log(arr.join()); //和toString()一样用逗号链接
console.log(arr.join("|")); //用参数链接
console.log(arr.join("&")); //用参数链接
console.log(arr.join(" ")); //如果是空格,真的用空格链接
console.log(arr.join("")); //空字符是无缝连接
数组元素的添加和删除
push( )和pop( )
1. 数组.push() //在数组的最末尾添加元素;
2. 数组.pop() //不需要参数;在数组的最末尾删除一项;
例:
var arr = [1,2,3];
var aaa = arr.push("abc");//在数组的最末尾添加一个元素;
console.log(arr);//元素被修改了
console.log(aaa);//返回值是数组的长度;
aaa = arr.pop();//不需要参数;在数组的最末尾删除一项;
console.log(arr);//元素被修改了
console.log(aaa);//被删除的那一项
unshift( )和shift( )
1. 数组.unshift() //在数组的最前面添加一个元素;
2. 数组.shift() //不需要参数;在数组的最前面删除一项;
例:
var arr = [1,2,3];
aaa = arr.unshift("abc");//在数组的最前面添加一个元素;
console.log(arr);//元素被修改了
console.log(aaa);//返回值是数组的长度;
aaa = arr.shift();//不需要参数;在数组的最前面删除一项;
console.log(arr);//元素被修改了
console.log(aaa);//被删除的那一项
数组元素排序
reverse( )
reverse() //翻转数组
例:
var arr1 = [1,2,3,4,5];
var aaa = arr1.reverse(); // [5,4,3,2,1]
sort( )
sort() // 数组中元素排序;(默认:从小到大)
// 默认:按照首个字符的Unicode编码排序;如果第一个相同那么就比较第二个...
例:
var arr = [4,5,1,3,2,7,6];
var aaa =arr.sort();
console.log(aaa); // [1, 2, 3, 4, 5, 6, 7]
console.log(aaa === arr);// true 原数组被排序了(冒泡排序)
//默认还可以排列字母;
var arr2 = ["c","e","d","a","b"];
var bbb = arr2.sort();
console.log(bbb); // ["a", "b", "c", "d", "e"]
console.log(bbb===arr2); // true 原数组被排序了(冒泡排序)
sort() //数值大小排序方法,需要借助回调函数;
例:
var arr = [4,5,1,13,2,7,6];
//回调函数里面返回值如果是:参数1-参数2;升幂; 参数2-参数1;降幂;
arr.sort(function (a,b) {
return a-b; //升序
//return b-a; //降序
//return b.value-a.value; //按照元素value属性的大小排序;
});
console.log(arr); // [1, 2, 4, 5, 6, 7, 13]
sort( )底层原理
var aaa = bubbleSort([1,12,3], function (a,b) {
// return a-b;//实参:array[j]-array[j+1];
return b-a;//实参:array[j+1]-array[j];
});
console.log(aaa);
function bubbleSort(array,fn){
//外循环控制轮数,内循环控制次数,都是元素个数-1;
for(var i=0;i<array.length-1;i++){
for(var j=0;j<array.length-1-i;j++){//次数优化,多比较一轮,少比较一次;
//满足条件交换位置;
// if(array[j]>array[j+1]){//大于升幂排序;否则降幂;
//a-b>0 和 a>b是一个意思;
//b-a>0 和 a<b是一个意思;
// if(array[j]-array[j+1]>0){//升幂排序
// if(array[j+1]-array[j]>0){//降幂排序
//把两个变量送到一个函数中;
if(fn(array[j],array[j+1])>0){
var temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
//返回数组
return array;
}
数组元素的操作
concat( )
数组1.concat(数组2); // 链接两个数组;
var arr1 = [1,2,3];
var arr2 = ["a","b","c"];
var arr3 = arr1.concat(arr2);
console.log(arr3) // [1, 2, 3, "a", "b", "c"]
slice( )
数组.slice(开始索引值,结束索引值); //数组截取;
例 :
var arr = [1, 2, 3, "a", "b", "c"];
console.log(arr.slice(3)); //从索引值为3截取到最后;["a", "b", "c"]
console.log(arr.slice(0,3)); //包左不包右;[1, 2, 3]
console.log(arr.slice(-2)); //负数是后几个;["b", "c"]
console.log(arr.slice(3,0)); //如果前面的比后面的大,那么就是[];[]
console.log(arr); //原数组不被修改;[1, 2, 3, "a", "b", "c"]
splice( )
数组.splice(开始索引值,删除几个,替换内容1,替换内容2,...); // 替换和删除;
//改变原数组;返回值是被删除/替换的内容
例:
var arr = [1,2,3,4,5,6,"a", "b", "c"]
arr.splice(5); //从索引值为3截取到最后;(删除)
console.log(arr); // [1, 2, 3, 4, 5]
arr.splice(1,2); //(删除指定个数)从索引为1的开始删除2个
console.log(arr); //[1, 4, 5]
//替换
var arr = [1,2,3,4,5,6,"a", "b", "c"];
console.log(arr.splice(3,3,"aaa","bbb","ccc")); //(删除指定数并替换)
console.log(arr); // [1, 2, 3, "aaa", "bbb", "ccc", "a", "b", "c"]
// 添加
arr.splice(3,0,"aaa","bbb","ccc");//(删除指定个数)
//
console.log(arr);//截取或者替换之后的; [1, 2, 3, "aaa", "bbb", "ccc", "aaa", "bbb", "ccc", "a", "b", "c"]
indexOf / lastIndexOf
数组.indexOf(元素); // 给元素,查索引(从前往后)
数组.lastIndexOf(元素); // 给元素,查索引(从后往前)
例:
var arr = ["a","b","c","d","c","b","b"];
console.log(arr.indexOf("b")); // 1 查到以后立刻返回
console.log(arr.lastIndexOf("b")); // 6 找到以后立刻返回
console.log(arr.indexOf("xxx")); // -1; 查不到就返回-1;
数组迭代(遍历)
every()
对数组中每一项运行回调函数,如果都返回true,every返回true,
如果有一项返回false,则停止遍历 every返回false;不写默认返回false
像保镖失误一次,游戏结束!!!
例:
1. var arr = [111,222,333,444,555];
arr.every(function (a,b,c) {
console.log(a); //元素
console.log(b); //索引值
console.log(c); //数组本身;
console.log("-----"); //数组本身;
//数组中元素赋值:c[b] = 值; a=有时候无法赋值;
return true;
});
2. //every返回一个bool值,全部是true才是true;有一个是false,结果就是false
var bool = arr.every(function (element, index, array) {
//判断:我们定义所有元素都大于200;
//if(element > 100){
if(element > 200){
return true;
}else{
return false;
}
})
alert(bool); //false
filter()
// 对数组中每一项运行回调函数,该函数返回结果是true的项组成的新数组
// 新数组是有老数组中的元素组成的,return为ture的项;
例:
var arr = [111,222,333,444,555];
var newArr = arr.filter(function (element, index, array) {
//只要是奇数,就组成数组;(数组中辨别元素)
if(element%2 === 0){
return true;
}else{
return false;
}
})
console.log(newArr); // [222, 444]
forEach()
// 和for循环一样;没有返回值;
例:
var arr = [111,222,333,444,555];
var sum = 0;
var aaa = arr.forEach(function (element,index,array) {
console.log(element); // 输出数组中的每一个元素
console.log(index); // 数组元素对应的索引值
console.log(array); // 数组本身 [111, 222, 333, 444, 555]
sum += element; //数组中元素求和;
});
console.log(sum); // 数组元素加起来的和
console.log(aaa);//undefined;没有返回值 所以返回undefined
map()
// 对数组中每一项运行回调函数,返回该函数的结果组成的新数组
// return什么新数组中就有什么; 不return返回undefined; 对数组二次加工
例:
var arr = [111,222,333,444,555];
var newArr = arr.map(function (element, index, array) {
if(index == 2){
return element; // 这里return了 所以下面返回的值是333
}
return element*100; // 返回的元素值都乘上100后的值
})
console.log(newArr); // [11100, 22200, 333, 44400, 55500]
some()
//对数组中每一项运行回调函数,如果该函数对某一项返回true,则some返回true; 像杀手,有一个成功,就胜利了!!!
例:
var arr = [111,222,333,444,555];
var bool = arr.some(function (ele,i,array) {
//判断:数组中有3的倍数
if(ele%3 == 0){
return true;
}
return false;
})
alert(bool); //true ; 有一个成功就是true
数组清空
1. arr.length = 0; // (不好,伪数组无法清空)
2. arr.splice(0); // 伪数组没有这个方法;
3. arr = []; // 可以操作伪数组; (推荐!)
数组案例
1.将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现
var arr = ["刘备","张飞","关羽"];
var separator = "|";
//通过for循环累加
var str = arr[0];
for(var i=1;i<arr.length;i++){
str += separator+arr[i];
}
console.log(str); // 刘备|张飞|关羽
//join()可以把数组中的元素链接成字符串;
console.log(arr.join("|")); // 刘备|张飞|关羽
2.将一个字符串数组的元素的顺序进行反转。["a", "b", "c", "d"] -> [ "d","c","b","a"]。使用两种种方式实现。提示:第i个和第length-i-1个进行交换
// 数组.reverse() 方法
var arr = ["a", "b", "c", "d"];
console.log(arr.reverse()); // ["d", "c", "b", "a"]
// 三种:1.正向遍历,反向添加; 2.反向遍历,正向添加; 3.元数组元素交换位置;
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);
3.工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过2000的删除
var arr = [1500, 1200, 2000, 2100, 1800];
//利用filter()形成一个数组;return true;组成的数组;
var newArr = arr.filter(function (ele, i, array) {
//2000以上返回false;
if(ele<2000){
return true;
}else{
return false;
}
});
console.log(newArr); // [1500, 1200, 1800]
4.["c", "a", "z", "a", "x", "a"]找到数组中每一个a出现的位置
var arr = ["c", "a", "z", "a", "x", "a"];
//遍历数组(for/while/do...while) forEach();
arr.forEach(function (ele, index, array) {
//如果元素等于“a”,那么就输出索引值;
if("a" === ele){
console.log(index);
}
});
5.编写一个方法去掉一个数组的重复元素 (数组去重)
var arr = ["鸣人","鸣人","佐助","佐助","小樱","小樱"];
// 方法1: 思路:定义一个新数组,遍历老数组,判断,如果新数组里面没有老数组的元素就添加,否则就不添加;
var newArr = [];
//遍历老数组
arr.forEach(function (ele,index,array) {
//检测老数组中的元素,如果新数组中存在就不添加了,不存在才添加;
if(newArr.indexOf(ele) === -1){//不存在就添加;(去新数组中查找元素索引值,如果为-1就是没有)
newArr.push(ele);
}
});
console.log(newArr); // ["鸣人", "佐助", "小樱"]
原文:https://segmentfault.com/a/1190000012276002
js 数组 方法的更多相关文章
- js 数组方法比较
js 数组方法比较 table th:first-of-type { width: 80px; } table th:nth-of-type(2) { width: 120px; } table th ...
- js数组方法详解
Array对象的方法-25个 /*js数组方法详解 */ /* * 1 concat() 用于连接多个数组或者值-------------- * 2 copyWithin() 方法用于从数组的指定位置 ...
- 转载收藏(js数组方法大全)
js数组方法大全 JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Arra ...
- js数组方法大全(上)
# js数组方法大全(上) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 join() reverse() sort() concat() slice( ...
- js数组方法大全(下)
# js数组方法大全(下) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 forEach() map() filer() every() some() ...
- JS数组方法汇总 array数组元素的添加和删除
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...
- 几个关于js数组方法reduce的经典片段
以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...
- js数组方法详解(最新最全)
数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...
- js数组方法解析
js 数组有很多方法,其中有的常用,有的不常用,归纳几个常用的方法,做个总结: 1. 转换方法: 1.1 valueOf():调用这个方法会返回数组本身 <script> var arr ...
- js数组方法
数组方法清空数组1: arr.length=02: arr=[]arr.push()//往数组最后一个添加元素,会待会一个返回值,就是新的数组长度arr.unshift()//往数组的第一个添加元素, ...
随机推荐
- PLL到底是个啥么东西呢?
——————————————————更新于20180826———————————————————————————— PLL:完成两个电信号的相位同步的自闭环控制系统叫锁相环.用电压控制延时,用到了VC ...
- 吴裕雄--天生自然Android开发学习:1.2 开发环境搭建
现在主流的Android开发环境有: ①Eclipse + ADT + SDK ②Android Studio + SDK ③IntelliJ IDEA + SDK 现在国内大部分开发人员还是使用的E ...
- 关于后端下载后端返回的blob类型文件的下载
关于后端返回blob类型的文件下载记录,在请求的时候前端设置响应类型 responseType: 'blob', const blob = new Blob([r], {type: r.type}); ...
- Mac使用sublime text3的快捷键
符号说明⌘:command⌃:control⌥:option⇧:shift↩:enter⌫:delete 打开/关闭/前往⌘⇧N 打开一个新的sublime窗口⌘N 新建文件⌘⇧W 关闭sublime ...
- 【转】【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】
[关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明][指数循环节] 原文地址:http://hi.baidu.com/aekdycoin/item/e493 ...
- vue项目实例-常用标签
感谢:https://www.jianshu.com/p/5d9b341d650f 总结: 1.<router-link to=''>主要实现跳转链接功能,属性to='/'即是跳转到pat ...
- Java并发编程入门与高并发面试(三):线程安全性-原子性-CAS(CAS的ABA问题)
摘要:本文介绍线程的安全性,原子性,java.lang.Number包下的类与CAS操作,synchronized锁,和原子性操作各方法间的对比. 线程安全性 线程安全? 线程安全性? 原子性 Ato ...
- log4j.properties总结
一.以自己的log4j.properties为例: # 配置根Logger,格式:log4j.rootLogger = [ level ] , appenderName1, appenderName2 ...
- Java正则表达式java.util.regex类的简单使用
1.什么是正则表达式? 正则表达式(regular expression)是根据字符串集合内每个字符串共享的共同特性来描述字符串集合的一种途径.正则表达式可以用于搜索.编辑或者处理文本和数据. Jav ...
- python猜数字游戏快速求解解决方案
#coding=utf-8 def init_set(): r10=range(10) return [(i, j, k, l) for i in r10 for j in r10 for k in ...