js 数组 array 相关知识整理(方便记忆版)

js内置对象

内置对象:ECMAScript标准中定义好的,由浏览器厂商已经实现的标准对象,其中封装了专门的数据和操作数据的API。

js中内置对象有11个

String / Boolean / Number / Array / Date / Math / Function / RegExp  / Error / Object / Global

包装类型:专门封装原始类型数据,并提供对数据常用操作的内置类型。

包装类型可让原始类型的数据像引用类型一样,拥有方法和属性。

js中的包装类型有3个

String类型 、 Number类型 、 Boolearn类型

用原始类型的数据调用方法或访问属性时,js引擎自动创建对应的包装类型对象,方法调用完,包装类型对象自动释放。

数组

数组是引用类型(值不保存在变量本地)的对象。

用new操作符创建对象,new专门用于在内存中动态开辟一块存储空间,然后返回存储空间的地址。

使用new创建出的都是引用类型的对象。

索引数组:以0,1,2,3...数字作为下标,查找速度与数组长度和元素的下标密切相关。

关联数组/hash数组:

以字符串作下标;

length永远为0,只能用for...in遍历;

元素为键值对,var arr=["name":"杨幂","gender":"女"];

稀疏数组:下标不连续的数组

数组方法

push pop unshift shift 改变原数组

<script>
    var testArr=[11,22,33,44,55,66,77,88,99];
    var testArr1=[11,22,33,44,55,66,77,88,99];
    var testArr2=[11,22,33,44,55,66,77,88,99];
    var testArr3=[11,22,33,44,55,66,77,88,99];
    var testArr4=[11,22,33,44,55,66,77,88,99];

    console.log("原数组: "+testArr)
    console.log("\n")

    console.log("pop()返回值: "+testArr1.pop()+" 返回删除的值")
    console.log("pop后数组: "+testArr1+" 末尾删除")
    console.log("\n")

    console.log("push(100)返回值: "+testArr2.push(100)+" 添加操作返回新数组长度")
    console.log("push后数组: "+testArr2+" 末尾添加")
    console.log("\n")

    console.log("shift()返回值: "+testArr3.shift()+" 返回删除的值")
    console.log("shift后数组: "+testArr3+" 头部删除")
    console.log("\n")

    console.log("unshift(999)返回值: "+testArr4.unshift(999)+" 添加操作返回新数组长度")
    console.log("unshift后数组: "+testArr4+" 头部添加")
</script>

末尾进出 push pop

push() 方法可向数组的末尾添加一个或多个元素,并返回新的数组长度。

pop() 方法用于删除并返回删除的元素。

特点:原来的元素位置(序号)不变。

头部进出 unshif shift

unshift() 方法可向数组的开头添加一个或更多元素,并返回新的数组长度。

shift() 方法用于把数组的第一个元素从其中删除,并返回删除的元素。

特点:原来的元素位置(序号)改变;

业务应用场景举例:

需求:展示最新的10条历史搜索关键词。

实现:使用缓存 storage ,开头(下标 0)添加新数据(unshift),其他数据后移(下标 + 1),超过10条,删除尾部(pop)。

多个数组拼接为一个新数组返回 concat

arrayObject.concat(arrayX,arrayX,......,arrayX)

更简便的,使用 es6 扩展运算符 ...

console.log(1,...[2,[3]])
//1 2 [3]

一个数组内所有元素拼接为字符串返回 join

arrayObject.join(separator)

省略参数,则使用逗号作为分隔符。

var str1=`
a
b
c`;

var str2='a\nb\nc';

var str3=['a','b','c'].join('\n')

console.log(str1)
console.log(str2)
console.log(str3)

改变原数组,颠倒数组内元素 reverse

arrayObject.reverse()

截取数组 slice,返回截取的数组

arrayObject.slice(start,end)

start 必填,含头不含尾(end)。

end 选填,没有指定end,截取从 start 到数组结束的所有元素。

参数为负,从数组尾部开始计算,-1 指最后一个元素。

增删改数组 splice(改变原数组)

arrayObject.splice(index,howmany,item1,.....,itemX)

返回值:由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。

var arr=["a","b","c","d"];

arr.splice(0,1)

console.log(arr)//["b", "c", "d"]

 

index    必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX    可选。向数组添加的新项目。

var arr=["a","b","c","d"];
var str1=arr[0]
var str4=arr[3]
//交换arr[0] 和 arr[3]
arr.splice(0,1,str4)
console.log(arr)//["d", "b", "c", "d"]
arr.splice(3,1,str1)
console.log(arr)//["d", "b", "c", "a"]

 

数组API

1、判断:数组中的元素是否符合要求,返回布尔值;

arr.every()

arr.some()

2、遍历:对数组中的每个元素执行相同的操作;

arr.forEach() 直接修改原数组

arr.map() 返回新数组

3、过滤:筛选出符合条件的元素,不修改原数组,组成新数组;

arr.filter()

使用 filter,可以巧妙地去除Array的重复元素

// var arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
var arr=[2,22,2222,2,22,222]
var r = arr.filter(function (element, index, self) {
    return self.indexOf(element) === index;
});
console.log(r.toString());

// 利用set没有重复的值这一特性, 实现数组去重。

// Array.form方法可以将 Set 结构转为数组。

var arr = [1,2,2,3,33,4]

var newArr= Array.from(new Set(arr))

4、汇总:将当前数组中的所有元素统计出一个结果;

arr.reduce()

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

第一个参数是化简函数累积的结果,第二个参数是化简函数的初始值,省略默认为数组的第一个元素。

var arr = [1,2,3,4,5,6];

console.log(arr.reduce(function(x,y){return x+y;},0));//=>1+2+3+4+5+6=21

reduceRight( ) 工作原理和 reduce( ) 一样,不同的是按照数组索引从高到低(从右到左)处理数组元素。

var arr = [1,2,3,4,5,6];

console.log(arr.reduceRight(function(x,y){return x+y;},0));//=>6+5+4+3+2+1=21

 

总结

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Irene1991

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值