JavaScript数组的属性及方法

已经连续更新了第四天了,希望各位大佬们,可以给出宝贵的意见,顺便给小弟点一赞?。今天和大家唠一下数组(Array)和字符串(String)的一些方法和属性:

来吧既然走到了这里,就歇歇脚吧

Array 数组

说实话看到数组这么多的方法我就脑瓜子疼,唉没办法硬着头皮上吧

  1. length 属性:动态获取数组的长度;
let a = [1,2,3]
console.log(a.length) // 3
  1. jion() 将一个数组转成字符串,返回一个字符串;
let a = [1,2,3]
console.log(a.join()) // 1,2,3

  1. reverse() 将数组中各元素颠倒顺序;
 let a = [1,2,3]
 console.log(a.reverse()) // [3, 2, 1]
 
  1. delete() 运算符 只能删除数组元素的值,而所占空间还在,总长度没变(arr.length)
let a = [1,2,3];
delete a[1]; // a在索引1的位置不再有元素
1 in a  // false 数组索引1并未在数组中定义
a.length //  3  delete操作并不影响数组长度

  1. shift() 删除数组中的第一个元素,返回删除的那个值,并将长度减一;
let a = [1,2,3]
a.shift()  //a变成了[2,3]  返回:1
let b = [[1,2],3,4] 
b.shift()  //b 变成了[3,4]  返回:[1,2]
  1. pop() 删除数组中的最后一个元素,返回删除的那个值,并将长度减一;
// 其实push和pop就是允许将数组当做栈来使用
let stack = [1,2,3]
stack.pop()  //  stack:[1,2] stack.length = 2 返回: 3
let stack1 = [1,2,[3,4]]
stack1.pop()  //stack1:[1,2]  stack1.length = 2 返回:[3,4]
  1. unshift() 往数组前面添加一个或多个数组元素,长度要改变,最后返回数组新的长度;
let a = [ ];
a.unshift(1);  //a:[1]  返回:1
a.unshift(2);  //a:[2,1]  返回:2

  1. push() 在数组的结尾添加一个或多个元素,长度要改变;
let stack = [ ]
stack.push(1,2)   // stack:[1,2]  返回:2
stack.push([4,5])  //stack:[1,2,[4,5]] 返回:3
  1. concat() 连接数组;
// Array.concat()方法创建并返回一个新数组 ,但是concat()不会扁平化数组
let a = [1,2,3];
a.concat(4.5)   // 返回 [1,2,3,4,5]
a.concat([4,5])  // 返回 [1,2,3,4,5]
a.concat([4,5],[6,7])  //返回[1,2,3,4,5,6,7]
a.concat(4,[5,[6,7]])  //返回[1,2,3,4,5,[6,7]]
  1. slice() 返回数组的一部分;
let a = [1,2,3,4,5]
a.slice(0,3)  // 返回:[1,2,3]
a.slice(3)  //返回[4,5]
a.slice(1.-1) //返回[2,3,4]   参数中的负数,表示相对于数组中最后一个元素的位置
a.slice(-3,-2) //返回 [3]
  1. sort() 对数组进行排序;Array.sort()方法将数组中的元素排序并返回排序后的数组。当不带参数调用sort()时,数组元素以字母表排序(有必要的时候将临时转化为字符创进行比较)
let a = new Array('sunday','apple','jiujiu')
a.sort()  //返回值['apple','jiujiu','sunday']<br>
//如果数组包含undefined元素,他们会被排到数组的尾部
let b = [33,4,111,222]
b.sort()  //[111,222,33,4]  得出的事字母表排序
b.sort( function (a,b) {  //数值顺序:4,33,111,222
    return a-b;  //根据顺序,返回负数,0,正数
})

其余建议大家看一下《JavaScript权威指南》
  1. splice() 插入、删除或者替换数组的元素,splice()返回一个由删除元素组成的数组,或者如果没有删除元素就返回一个空数组。
// 第一个参数指定了插入或删除的起始位置,第二个参数指定了应该从数组删除的元素个数,<br>
//如果省略第二个参数,从起点开始到数组结尾的所有元素都将被删除。
let a = [1,2,3,4,5,6,7,8]
a.splice(4)   //返回[5,6,7,8]  a:[1,2,3,4]
a.splice(1,2)  //返回[2,3]  a:[1,4]
a.splice(1,1)  //返回[4] a:[4]
// splice()的前两个参数指定了需要删除的数组元素,紧随其后的任意个数的参数指定了,需要插入到数组中的元素,从第一个参数指定的位置插入
let a = [1,2,3]
a.splice(2,2,'a','b')   //返回[]  a:[1,2,'a','b',3]

  1. toString() 将数组转换成一个字符串;
[1,2,3].toString()   //  '1,2,3'
['a','b','c'].toString()   // 'a,b,c'
['a',[2,'c']].toString()   // 'a,2,c'

  1. forEach(),对数组每一项进行给定函数,和for循环类似
// 传递的函数为forEach()的第一个参数,然后forEach()使用<br>//三个参数调用该函数:数组元素,元素索引和数组本身

let arr = [1,2,3,4,5,6] 
//计算数组元素的和值
let sum = 0;
arr.forEach(function(value) {
    sum += value
})
// sum的返回值为21

// 为每个数组元素的值加1
arr.forEach(function(v,i,a) {
    a[i] = v+1
})
//数组返回值  [2,3,4,5,6,7]

/**
注意一下,forEach无法在所有元素都传递给调用的函数之前终止遍历,
其实就是说,forEach中没有break语句,如果要提前终止,就在forEach()方法放在try块中,并能抛出一个异常,抛出异常,循环会提前终止
 */
 function foreach(a,f,t) {
     try{
         a.forEach(f,t);
     }catch (e) {
         if(e === foreach.break) return;
         else throw e
     }
 }
 foreach.break = new Error('StopIterration');

  1. map() 对数组中每一项进行给定函数,返回每次函数调用的结果组成新的数组。
// callback:必须的参数,对数组每一项要执行的函数
// thisArg:可选,规定callback回调函数this所指向的对象。
let arr = [1,2,3,4,5,6]
let mapArr = arr.map(function(item,index,array) {
    return item*2
})
// 返回值为[2,4,6,8,10,12]

let arr = [1,2,3,4,5,6]
let obj = {num:2}
let mapArr = arr.map(function(item,index,array) {
    return item*this.num
},obj)
// 返回值为[2,4,6,8,10,12]
  1. filter()方法返回的数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的:该函数返回true和false,其实就是数组的过滤
let arr = [1,2,3,4,5,6,,7]
let newArr = arr.filter(function(x) { return x < 3 })  // [1,2]
  1. indexOf()和lastIndexOf()搜索整个数组中具有给定值得元素,返回找到的第一个元素的索引或者如果没有找到就返回-1.indexOf()从头至尾搜索,而lastIndexOf()则反方向搜索。
let a = [1,2,3,1]
a.indexOf(1)  //返回索引 0   a[0]是1
a.lastIndexOf(1)  //返回索引 3   a[3]是1
a.indexOf(4)  //返回-1,没有值为4的元素
  1. 如何判断数组
Array.isArray([])   //true
Array.isArray({})   //false

[] instanceof Array   // true
  1. ES6中的数组新方法find(),findIndex()
/**数组实例的`find`方法,用于找出第一个符合条件的数组
成员。它的参数是一个回调函数,所有数组成员依次执行该
回调函数,直到找出第一个返回值为`true`的成员,
然后返回该成员。如果没有符合条件的成员,则返回`undefined`。*/
[1, 4, -5, 10].find((n) => n < 0)   // -5
// findIndex()返回下标
[1,4,-5,10].findIndex(n) => n < 0)  // 下标为2
  1. includes() 判断数组中是否存在该元素,可以替换 ES5 时代的 indexOf 判断方式。
includes(value,start)

  • value:必需,要检测的元素。
  • start:可选,规定填充开始位置,默认从索引0处开始。
let arr = ['a', 'b','c', 'd', NaN]
arr.includes('a') //true
arr.includes(NaN) //true
arr.indexOf(NaN) //-1

  1. fill() 用新元素替换掉数组内的元素,可以指定替换下标范围。
fill(value,start,end)

  • value:必需,用来进行填充的值。
  • start:可选,规定填充开始位置,默认从索引0处开始。
  • end:可选,规定填充结束位置,默认填充到数组结尾。
const arr = ['a', 'b', 'c', 'd']
console.log(arr.fill('ss', 1, 3))  // ["a", "ss", "ss", "d"]

const arr2 = ['a', 'b', 'c', 'd']
console.log(arr.fill('ss'))  // ["ss", "ss", "ss", "ss"]

来个算法摧残一下自己吧

 /* 
        在一个神话故事中,有一只小兔住在一个周长为一千米的圆形神湖旁,A.B两点把这个神湖分成两部分,已知小兔从B点出发,沿逆时针方向绕神湖做跳跃运动,它每跳8分之3千米休息一次,如果跳到A点正好休息,那么就会经过特别通道AB滑倒B点,从B点继续跳。它每经过一次特别通道,神湖半径就扩大一倍,现知小兔共休息1000次,这时神湖周长是多少千米?(AB为圆的直径)*/
        //神湖周长
        var c = 1000;
        // 跳跃一次的距离
        var jump = 375;
        // 到A点休息时跳跃的次数
        var j = 0;
        // 跳跃1000次
        for (var i = 1; i <= 1000; i++) {
            // 跳跃到c/2
            if(jump * (i-j) % c == c/2) {
                // 周长加倍
                j = i;
                c *= 2;
            }
        }
        // 在控制台打印周长
        console.log(c)   //128000
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值