数组篇

130 阅读4分钟

1.数组篇

1.1 pop shift 返回删除了元素

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = fruits.pop();      // x 的值是 "Mango"

1.2 push unshift返回的是数组当前的长度

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x =  fruits.push("Kiwi");   //  x 的值是 5

1.3 splice 返回一个包含已删除项的数组

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(0, 1);        // 删除 fruits 中的第一个元素

1.4 concat 合并数组

var arr1 = ["Cecilie", "Lone"];
var arr2 = ["Emil", "Tobias", "Linus"];
var arr3 = ["Robin", "Morgan"];
var myChildren = arr1.concat(arr2, arr3) // 方法不会更改现有数组。它总是返回一个新数组。

1.5 slice 切割数组

// 相比较于splice slice不会改变原数组,但功能没有splice强大
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(2); // ["Lemon", "Apple", "Mango"]
console.log(fruits) // ["Banana", "Orange", "Lemon", "Apple", "Mango"]

1.6 sort 排序

// sort 排序的原理
// 当 sort() 函数比较两个值时,会将值发送到比较函数,并根据所返回的值(负、零或正值)对这些值进行排序。
// 中文姓名的拼音首字母排序的检索思路 通过将文字转化成拼音
var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}];
cars.sort(function(a, b){
      var x = a.type.toLowerCase();
      var y = b.type.toLowerCase();
      if (x < y) {return -1;}
      if (x > y) {return 1;}
      return 0;
});

1.7 fill 函数的简单用法

arr.fill(value, start, end)

value:填充值。

start:填充起始位置,可以省略。

end:填充结束位置,可以省略,实际结束位置是end-1。

1.采用一默认值填初始化数组。
 const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr1.fill(7)
console.log('%s', arr1)
 
7,7,7,7,7,7,7,7,7,7,7
2.制定开始和结束位置填充。

实际填充结束位置是前一位。

const arr3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr3.fill(7, 2, 5)
console.log('%s', arr3)
 
 
1,2,7,7,7,6,7,8,9,10,11
3.结束位置省略。

从起始位置到最后。

onst arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr4.fill(7, 2)
console.log('%s', arr4)
 
1,2,7,7,7,7,7,7,7,7,7

1.8 reduce 函数的用法

array.reduce(function(total, current, index, arr), initvalue)

1、reduce()累加和累乘
let arr3 = [1,3,4,6,7];
let sum3 = arr3.reduce((pre,cur)=> pre+cur, 0)    
let multiply = arr3.reduce((pre,cur) => pre*cur, 0)    
console.log(sum3) // 21
2.reduce 数组去重
    // 数组去重
    let arr4 = [1,3,2,5,3,1,2,7,8];
    let newArr = arr4.reduce((pre,cur)=>{
      if(!pre.includes(cur)){
        return pre.concat(cur)
      } else {
        return pre
      }
    },[]); // 初始值可以为数组
    console.log(newArr, '数组去重') // [1, 3, 2, 5, 7, 8] 
3. 将二维数组转换成一维数组
    // 将二维数组转换成一维数组
    let arr5 = [[1,2],[3,4],[5,7]];
    let newArr2 = arr5.reduce((pre,cur)=>{
      return pre.concat(cur)
    },[]);
    console.log(newArr2, '二维转成一维') // [1, 2, 3, 4, 5, 7]
4.操作对象属性
    const data = [
          {
            id:1,
            name:'安徽'
          },
          {
            id:2,
            name:'南京'
          },
          {
            id:3,
            name:'上海'
          },
          {
            id:4,
            name:'杭州'
          },
          {
            id:5,
            name:'天津'
          },
          {
            id:6,
            name:'北京'
          },
          {
            id:7,
            name:'山东'
          },
          {
            id:8,
            name:'河南'
          },
          {
            id:9,
            name:'重庆'
          },
          {
            id:10,
            name:'成都'
          },
          {
            id:11,
            name:'合肥'
          },
        ]
        const city_list = data.reduce((prev, item, idx) => {
          let key =
          idx > 8
            ? `${idx + 1}00`
            : `0${idx + 1}00`;
          prev[key] = item.name;
          return prev;
        }, {});
        console.log(city_list, '转换后的城市列表')
5.计算数组每个元素出现的次数
    // 计算数组中每个元素出现的次数
    let arr7 =['红','黄','黑','黄','蓝','红']
    let num = arr7.reduce((pre,cur)=>{
      if(cur in pre){
        pre[cur]++
      }else {
        pre[cur] = 1
      }
      return pre
    },{})
    console.log(num,'num对象') //{红: 2, 黄: 2, 黑: 1, 蓝: 1} 

1.9 Array.form() 用法

Array.from(object, mapFunction, thisValue)

1651564835897

1. 构造指定长度并且有规律的数组
const myArr = Array.from({length: 5}, (v,i) => {
    console.log(v, i)
    return i+1});
console.log(myArr) // [ 1, 2, 3, 4, 5 ]
2.将伪数组转化成真正的数组
let arrayLike = {
    0: 'tom', 
    1: '65',
    2: '男',
    3: ['jane','john','Mary'],
    'length': 4
}
let arr = Array.from(arrayLike)
console.log(arr) // ['tom','65','男',['jane','john','Mary']]
3.将 new set()结构的数据转化成真正的数组‘

这个方法常用于数组去重

unction unique(array) {
  return Array.from(new Set(array));
}
 
unique([1, 1, 2, 3, 3]); // =&gt; [1, 2, 3]
4. 将字符串转化成数组
let str = 'hello world!';
       let arr = Array.from(str);
       console.log(arr); // ["h", "e", ..., ' ', 'w',...]
5. 浅克隆一个数组
    const numbers = [3, 6, 9];
    const numbersCopy = Array.from(numbers);
     
    numbers === numbersCopy; // =&gt; false

1.10 map和forEach 函数的比较

1.map函数返回一个新的数组,在map的回调函数里,迭代每一项的时候也必须有返回值。 如果数组为空则无法进行遍历,所以要对数组做非空校验。

2.forEach 没有返回值,数值为空后可以运行,不报错

1.11 数组元素的查找 find ,findIndex, indexOf, lastIndexOf

1.find与indexOf 的比较

indexOf 的兼容型更好,同时indexof 可以接受第二个参数来约束起始查找的位置,功能更强大。

find 用于查找符合规则的数组项,并将其整合成一个数组。

2. lastIndex 从末尾查找符合项的位置
3. indexOf 与 findIndex 的区别

indexOf 使用与简单的数组

find 适用与比较复杂的数组,比如对象数组

1.12 数组实训

1. 数组去重

\