原生对象Array学习

Array.from()   从类似数组的对象或可迭代的对象返回一个数组

参数列表

arraylike  类似数组的对象或者可以迭代的对象

mapfn(可选)   对对象遍历映射的函数

this(可选)  选择映射函数的this对象

     var charArr = Array.from("abc");
console.log(charArr[0]); //a var str = "abc";
console.log(str[0]); //a var a = Array.from(document.querySelectorAll("div"));
console.log(a[0]); // <div>1</div> var test = new Set("a","b","c");
var testget = Array.from(test);
console.log(testget[0]); //a var testfun = Array.from([1,2,3],x => x*10);
console.log(testfun[0]); //10

Array.isArray 参数  判断一个对象是否为数组

    var test = [];
console.log(Array.isArray(test)); //true 最可靠
console.log(typeof test); //object
console.log(test instanceof Array); //true

Array.of()   参数  element0 ... elementn   置于数组中的参数  区分 new Array()

    var test = Array.of("str","sss");
console.log(test[0]); //str var num = Array.of(2);
console.log(num[0]);//2
console.log(num.length); //长度为1 var num2 = new Array(3);
console.log(num2[0]); //undefined
console.log(num2.length); //3

数组对象的方法  concat()  组合两个或者两个以上的数组

当数组中存在引用对象的时候要注意

var obj = {
a:1
}; var num = [1,obj,2]; console.log(num[1]); //Object{a:1} obj.a = 100;
console.log(obj); //Object{a:100}
console.log(num[1]); // Object{a:100} //引用类型理解 指向的修改

array.entries()   返回数组的键值对

    var num = [1,2,3];
var map = num.entries(); console.log(map) //ArrayIterator对象
console.log(map.next().value);// [0,1]

array.every(function(value,index,array){},thisArg)  会对数组的每个元素调用函数 直到返回false或者到数组的末尾  确认数组中的所有成员是否都满足测试  数组为空返回true;  遇到一个返回false立即停止检测 返回false

function(value,index,array)  array 代表之前的数组参数  这样我们就可以在回调函数中修改数组对象

var obj = {min:10,max:20};

        var num = [10,12,15];

        var checkNumRange = function(value) {
if(typeof value !== 'number') {
return false;
} else {
return value >= this.min && value <= this.max;
} }; if(num.every(checkNumRange,obj)) {
console.log('in range');
} else {
console.log('out of range');
} //in range 关于thisArg

array.fill(value,start,end) start 用于填充数组值的起始索引 默认值为0   end 用于数组值的结束索引  默认值为this对象的length属性   如果start为负值  start取值 start+length  如果end为负值  end取值为end+length

var a = [1,2,3];

        a.fill(7);

        for(var i of a) {
console.log(i);
} 7 7 7
//fill方法会重写之前的值

array.filter(function(value,index,arr){},thisArg)  filter方法会为每一个array数组的的值调用回调函数  返回一个包含回调函数为其返回true的所用值得新数组    thisArg可选  如果不传为undefined  传值的时候可在回调函数中通过this关键字调用

var num = [1,2,5,8,10];

        function check(value) {
if(value%2 === 0) {
return true;
} else {
return false;
}
} var nums = num.filter(check); console.log(nums); 2 8 10

array.findIndex(function(value,index,arr),thisArg)  会对数组中的每一个值调用回调函数  直到有元素返回true  有元素返回true的时候 就会立即返回它的索引值 没有的时候返回-1

  var num = [1,2,4];

     var i = num.findIndex(function(value){if(value == 2) return true;});
console.log(i);

array.forEach(function(value,index,array),thisArg)     为数组中的每个元素执行指定的操作

var num = [1,2,4];

     function test(value,index,arr) {
arr[index] = arr[index] + 2;
} num.forEach(test);
console.log(num);

但是forEach不支持break   不如上面的例子中我们想要arr[index]的值为2的时候就break或者continue的时候 会报错 (for of  语句)

array.indexOf(searchElement,fromIndex)  返回某个值在数组中第一个匹配项的索引值   fromIndex 可选  默认为0     未找到返回 -1     如果fromIndex的等于或者数组的长度  返回-1  fromIndex的值为负值  起始位置从数组的长度加上fromIndex处开始  并且 indexOf()中执行的比较是 ===

var num = [1,20,8,6];

     var a = num.indexOf(20);
console.log(a); //1 var b = num.indexOf(20,2);
console.log(b); //-1 var c = num.indexOf(20,-3);
console.log(c); // 1

array.join([separator])  用指定的separator分割数组中的所有元素  返回字符串   当不传值的时候   使用逗号进行分割

var num = [2,6,10];
var test = num.join();
console.log(test); //2,6,10
console.log(typeof test); //string var test2 = num.join("-");
console.log(test2);//2-6-10

array.lastIndexOf(searchElement,fromIndex)   对比indexOf()      lastIndexOf()  是降序查找  从数组的后尾开始  如果没有fromIndex 则查找整个数组    如果fromIndex为负数 则为数组的长度+ fromIndex 处开始查询  返回第一个查找到的位置  没有返回-1

var num = [1,10,5,7,19];
var a = num.lastIndexOf(7);
console.log(a); //3
var b = num.lastIndexOf(7,2);
console.log(b); //-1

array.map(function(value,index,arr),thisArg)     返回一个数组 其中每一个元素都是关联原始数组执行回调函数的返回值

var obj = {
num:2,
count:function(value) {
return value+this.num;
}
}
//定义一个对象 它上面的方法根据传入的值 返回一个加他自身的一个变量的值 var nums = [1,2,3]; var getNum1 = nums.map(obj.count,obj);
console.log(getNum1); // 可以理解为每次map都将nums的值传递给力obj的count()方法
   // 3 4 5
var getNum2 = nums.map(function(value){ return this.count(value)},obj); //this的值代表后面传入的obj
console.log(getNum2);
  // 3 4 5

array.pop() 用于在数组中移除最后一个元素并返回该元素   数组为空 返回 undefined

array.push(array) 用于将新元素追加到数组的末尾  返回的是新数组的长度

通过pop() push() 方法可以模拟后进先出栈

var arr = new Array();

      arr.push(1,2);
arr.push(3);
console.log(arr); [1,2,3]
arr.pop(); console.log(arr);[1,2]

array.shift()  从数组中移除第一个元素 并返回该元素  数组为空 返回undefined

array.unshift(array) 在数组的开头加入元素  返回新数组的长度

通过 push() shift() 可以模拟先进先出栈

array.reduce(function(previousValue,currentValue,currentIndex,array){},initialvalue) 对数组中的所有元素调用回调函数 回调函数的返回值作为累积结果并且作为先一个元素调用回调函数的参数传入  返回值为最后一个元素调用回调函数的返回值

如果没有传入initialvalue 从数组第二个元素调用回调函数 如果传入了initialvalue从数组的第一个元素调用回调函数

也就是当没有传递初始值的时候   previousValue的值为数组的第一个元素  currentValue的值为数组的第二个元素  这个的计算结果作为previousValue传入下一个回调函数的调用

传递了初始值  第一次调用的时候  previousValue的值为传入的初始值  currentValue值为数组的第一个元素的值 计算结果作为previousValue传入下一次回调函数的调用

function test(previous,current,index,array) {
return previous + current;
} var num = [1,2,3]; var sum = num.reduce(test,0);
console.log(sum); //6 function getarr(previousArr,currentValue) {
var nextArr = null; if(currentValue >= 10 && currentValue <= 20) {
nextArr = previousArr.concat(currentValue);
} else {
nextArr = previousArr;
} return nextArr; } var nums = [1,26,8,12,90]; var emptyArr = []; var result = nums.reduce(getarr,emptyArr);
console.log(result); //12 可以通过filter()实现上面的功能

array.reduceRight() 对比 array.reduce()   以降序的方式执行  这个方法可以实现数组和字符串的反转

function test(previousArr,currentValue) {
return previousArr.concat(currentValue);
} var num = [1,2,3];
var empty = new Array();
var result = num.reduceRight(test,empty); console.log(result); // [3,2,1]

array.reverse()   反转数组   返回反转后的数组

array.slice(start,end)  返回一个Array对象 包含数组中的一部分 (复制到end的位置 不包括end元素)  如果start为负值 为length+ start    如果end为负值为end+length  如果end出现在start之前将不会复制任何元素

var num = [1,2,3];
var b = num.slice(0,2);
console.log(b); //[1,2] var c = num.slice(0);
console.log(c);//[1,2,3] 省略end 一直复制到末尾

array.some(function(value,index,array),thisArg)  确认数组中的元素是否为数组的每一个值均返回true  对比 every()     every() 方法对数组中的元素调用回调函数 当有不符合的立即返回false

some()方法当有数组元素调用回调函数返回true的时候 就返回true 否则遍历到数组末尾

array.sort(function(){})  对数组进行排序  返回排序后的数组   sort()方法会对当前的数组进行修改 不会产生新的数组对象

 function compare(pre,next) {
if(pre === next) {
return 0;
} else if(pre >= next) {
return 1;
} else {
return -1;
}
} var num = [10,1,12,100,0]; num.sort(compare);
console.log(num); //[0,1,10,12,100] 通过调整返回的1 -1 来实现升序和降序的排列

array.valueOf()  返回当前数组的引用

var num = [1,2,3];
var c = num.valueOf(); console.log(c === num); //true

array.splice(start,deletecount,array)  从数组中删除元素返回删除的元素    array参数可选 表示插入的元素   从删除的位置插入

返回值 是删除元素构成的数组     修改是在原来的数组上进行的

var num = [1,2,5,10];

    var b = num.splice(1,2,10,20);
console.log(b); //[2,5]
console.log(num); //[1,10,20,10]

javascript Array 方法学习的更多相关文章

  1. Javascript Array 方法整理

    Javascript Array 方法整理 Javascript 数组相关方法 说明 大多数其它编程语言不允许改变数组大小,越界访问索引会报错,但是 javascript不会报错,不过不建议直接修改a ...

  2. 最全总结 JavaScript Array 方法详解

    JavaScript Array 指南.png Array API 大全 (公众号: 前端自学社区).png 前言 我们在日常开发中,与接口打交道最多了,前端通过访问后端接口,然后将接口数据二次处理渲 ...

  3. javascript Array Methods(学习笔记)

    ECMAScript 5 定义了9个新的数组方法,分别为: 1.forEach();  2.map();  3.filter();  4.every();  5.some();  6.reduce() ...

  4. JavaScript Array 的学习

    首先创建数组 var empty = [];//创建一个空的数组: var diffType = [1,'a',2.3,{},[4,5],,];//创建一个包含不同类型的数组 var undef = ...

  5. Array方法学习小结

    原生js forEach()和map()遍历 A:相同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...

  6. javascript字符串方法学习汇总

    1.charAt(index) charAt(index):返回字符串中指定位置的字符 var str = 'abcdefghi'; console.log(str.charAt()); // 输出 ...

  7. JavaScript - reduce方法,reduceRight方法 (Array)

    JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...

  8. 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight

    做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...

  9. JavaScript 数组(Array)方法汇总

    数组(Array)常用方法; 数组常用的方法:concat(),every(), filter(), forEach(),  indexOf(), join(), lastIndexOf(), map ...

随机推荐

  1. CLR via C#深解笔记二 - 类型设计

    类型基础 所有类型都从System.Object派生   CLR要求所有对象都用new 操作符来创建. Employee e = new Employee("Constructor Para ...

  2. VMware的使用

    1.问题的提出   现在所有的组装台式机,均以64位操作系统作为平台   而且USB接口均以USB3.0默认   windows7 64位和windows 10 64位是主流   那么建立在windo ...

  3. make no mistake, we are the last line of defense.

    make no mistake, we are the last line of defense.

  4. zepto - push

    var arr = ['1', '2', '3', '4']; arr.push('qwe'); console.log(arr);

  5. SNF开发平台WinForm之六-上传下载组件使用-SNF快速开发平台3.3-Spring.Net.Framework

    6.1运行效果: 6.2开发实现: 1.先在要使用的项目进行引用,SNF.WinForm.Attachments.dll文件. 2.在工具箱内新建选项卡->选择项,浏览找到文件SNF.WinFo ...

  6. MyBatis知多少(12)私有数据库

    如果你从事软件开发工作有了一段时间的话,那么肯定听过关于“自己动手还是花钱购买” 的争论.该争论是说,针对一个业务问题,我们是应该自己动手构建自己的解决方案呢,还是应 该花钱购买一个声称已经解决了此问 ...

  7. Delphi 10.1 Berlin Starter Edition

    Delphi 10.1 Berlin Starter Edition Embarcadero® Delphi 10.1 Berlin Starter is a great way to get sta ...

  8. C#中,接口不能被实例化,但存在特例

    看一个例子: interface IFoo { string Message { get; } } 则, IFoo obj = new IFoo("abd"); 将会报错:接口不能 ...

  9. js中的执行上下文,菜鸟入门基础。

    console.log(a); //Uncaught ReferenceError: a is not defined 因为没有定义a所以报错了. var a = 52; console.log(a) ...

  10. 剑指架构师系列-Hibernate需要掌握的Annotation

    1.一对多的关系配置 @Entity @Table(name = "t_order") public class Order { @Id @GeneratedValue priva ...