数组

91 阅读3分钟

unshift 原数组被改变

let list1 = [2, 3, 5]
let list2 = list1.unshift(1)
console.log(list1)  // [1, 2, 3, 5]
console.log(list2)  // 4==>>数组的长度

push 原数组被改变

var arr1 = [1,2,3]
var p = arr1.push(4)
console.log(arr1) // [1,2,3,4]
console.log(p) // 4

splice 原数组被改变

  • 第一个参数 : 截取起点
  • 第二个参数 : 截取长度(要截取几个item就写几)
  • 后面的参数 : 新增的item
let arr1 = [0,1,2,3]
let arr2 = arr1.splice(1,0,'a','b','c')

console.log(arr1)   // [0, "a", "b", "c", 1, 2, 3]
console.log(arr2)   // []

shift原数组被改变

  • 作用: 去掉数组的第一个item
  • 特点: return 被删掉的那个item, ==>>原数组被改变
var arr1 = [1,2,3]
var p = arr1.shift()
console.log(arr1)  // [2,3]
console.log(p)     // 1

splice 原数组被改变

  • return 被删除的项目
  • 参数1 : 删除起点
  • 参数2 : 删除长度
let arr01 = [0, 0, 1, 1, 0]
let arr02 = arr01.splice(2,2)
console.log(arr01) // [0, 0, 0]
console.log(arr02) // [1, 1]

fill原数组被改变

  • 第一个参数: 要替换的内容
  • 第二个参数: 替换的起点(包括)
  • 第三个参数: 替换的结束点(不包括)
let list = [1,2,3,4,5,6]
let f = list.fill('s',1,4)
console.log(list)
console.log(f)
// [1, "s", "s", "s", 5, 6]
// [1, "s", "s", "s", 5, 6]

reverse原数组被改变

let s = '赵兄托你帮我办点事'
let l = [...s]          // 字符串转数组
let r = l.reverse()
console.log(r)          // ["事", "点", "办", "我", "帮", "你", "托", "兄", "赵"]
console.log(l)          // ["事", "点", "办", "我", "帮", "你", "托", "兄", "赵"]

sort原数组被改变

  • 将一个数组升序排列(a-b)
var arr1 = [11,1,2,22,33,3]
var s = arr1.sort((a, b) => a-b)
console.log(arr1) // [1, 2, 3, 11, 22, 33]
console.log(s)    // [1, 2, 3, 11, 22, 33]
  • 将一个数组降序排列(b-a)
var arr1 = [11,1,2,22,33,3]
var s = arr1.sort((a, b) => b-a)
console.log(arr1) 
console.log(s)
  • 将一个数组里的obj按年龄由小到大排序
var arr1 = [
    {name: 'jack', age: 22}, 
    {name: 'marry', age: 2}, 
    {name: 'tony', age: 11}
]
    
var s = arr1.sort((a, b) => a.age-b.age)
console.log(arr1)
console.log(s)

splice原数组被改变

  • return 被删除的项
  • 参数1 : 截取起点
  • 参数2 : 截取长度
  • 其他参数 : 新增的item
// 将  ---> [0, 0, 0, 1, 1, 1, 0]
// 变成---> [0, 0, 0, 9, 9, 9, 0]

let arr01 = [0, 0, 0, 1, 1, 1, 0]
let arr02 = arr01.splice(3, 3, 9, 9, 9)
console.log(arr01) // [0, 0, 0, 9, 9, 9, 0]
console.log(arr02) // [1, 1, 1]

splice 原数组改变

  • 第一个参数, 截取起点
  • 第二个参数, 截取长度
  • 原数组会被改变
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var list = fruits.splice(2,2);

console.log(fruits) //["Banana", "Orange"]
console.log(list)   //["Apple", "Mango"]

slice 原数组不变

  • 从原数组里面提取出一段
  • 第一个参数为起点
  • 第二个参数为终点
let list01 = ['a', 'b', 'c']
let list02 = list01.slice(0,2)
console.log(list01)     // ["a", 'b', "c"]
console.log(list02)     // ["a", 'b']

find原数组不变

  • 当找到第一个满足条件的item便会停止寻找
  • 所以, f = 4 而不是[4,5,6]
let list = [1,2,3,4,5,6]
let f = list.find((value,index,arr)=> value>3)
console.log(list)   // [1, 2, 3, 4, 5, 6]
console.log(f)      // 4

当数组中的item是obj时要特别小心, 如果我们修改查找结果, 原数组students也会发生变化

var students = [
    {name: 'jack' ,  age: 22, sex:'男'},
    {name: 'lucy' ,  age: 22, sex:'女'},
    {name: 'tom' ,   age: 25, sex:'男'},
    {name: 'Jerry' , age: 88, sex:'男'}
]

let tom = students.find(item=>item.name==='tom')
tom.age = 100   // <<==============================如果我们修改查找结果, 原数组students也会发生变化
console.log(tom)    // {name: 'tom' ,   age: 100, sex:'男'}
console.log(students)
// [
//    {name: 'jack' ,  age: 22, sex:'男'},
//    {name: 'lucy' ,  age: 22, sex:'女'},
//    {name: 'tom' ,   age: 100, sex:'男'}, <<=======================如果我们修改查找结果, 原数组students也会发生变化
//    {name: 'Jerry' , age: 88, sex:'男'}
// ]

filter()原数组不变

改变过滤数据women, 原数据students也会跟着改变

var students = [
    {name: 'jack' ,  age: 22, sex:'男'},
    {name: 'lucy' ,  age: 22, sex:'女'},
    {name: 'tom' ,   age: 25, sex:'男'},
    {name: 'Jerry' , age: 88, sex:'男'}
]
let women = students.filter(item => item.sex=='女')
women[0].age = 18 // <<================================注意: 改变过滤数据women, 原数据students也会跟着改变
console.log(women)  // [{name: "lucy", age: 18, sex: "女"}]
console.log(students)
//  [
//    {name: 'jack' ,  age: 22, sex:'男'},
//    {name: 'lucy' ,  age: 18, sex:'女'},  <<================注意: 改变过滤数据women, 原数据students也会跟着改变
//    {name: 'tom' ,   age: 25, sex:'男'},
//    {name: 'Jerry' , age: 88, sex:'男'}
//  ]

indexOf

    var fruits = ["香蕉", "橙子", "苹果", "甜瓜"];
    var index = fruits.indexOf("苹果")
    console.log(index)  // 2

item 是一个对象

    let list = [
      {name: 'a', age: 11},
      {name: 'b', age: 18},
      {name: 'c', age: 9},
    ]

    let target = list.find(item => item.name === 'a')
    let index01 = list.indexOf(target) 
    let index02 = list.indexOf({name: 'a', age: 11}) // -1 表示查询失败
    console.log(index01, index02) // 0 -1 

类型转换

join 数组 转 字符串

// ['a', 'b', 'c'] ---> 'abc'
let a = ['a', 'b', 'c']
let s = a.join('')
console.log(s)      // 'abc'
// ['a', 'b', 'c'] ---> 'a-b-c'
let a = ['a', 'b', 'c']
let s = a.join('-')
console.log(s)      // 'a-b-c'

split() 字符串转数组

  • 例1: 将字符串'abcde'变成数组
let s = 'abcdefg'
let list = s.split('')
console.log(list)   //['a','b','c','e','f','g']
let s = 'abcde'
let list = [...s]
console.log(list)   // ['a', 'b', 'c', 'd', 'e']
  • 例2: 将字符串' 7 x 8 x 9 ' 转成 ['7', '8', '9']
let s = ''7x8÷9''
let numer_list = s.split(/[\×\÷+-]/)
console.log(number_list)    //['7', '8', '9']

reduce [...]{...}

const a = ["a", "b"];

const b = a.reduce((res, v, k) => {
  res[k] = v;
  return res;
}, {});

console.log(a); // ["a", "b"]
console.log(b); // {0: "a", 1: "b"}
[1, 2, 3].reduce((a,b) => {
    console.lgo(a, b)
    return b
})

// 打印结果
// 1,2
// 2,3

交换赋值

let x = 1
let y = 2;  //<<<--- 一定要写这个分号, 不然会报错(y is undefined)
[x,y] = [y,x]
console.log(x, y)