数组

数组 可以有序的存储一组数据,每个数据对应的有索引 可以根据索引访问数组中的数据

  1. 1.可以根据索引**获取**数组中的数据<br /> 2.可以根据索引**修改**数组中的数据<br /> 3.可以根据索引在数组的**末尾添加**新数据<br /> 4.数组对象的属性:length 获取数组中元素的数量(数组的长度)<br /> 5.遍历数组

增加元素:开头arr.unshift()

末尾arr.push()

删除元素:开头arr.shift()

末尾arr.pop()

删除几位元素:arr.splice(1,2)//1开始。删除两位。

删除几位元素并插入:arr.splice(1,2,’w’,’e’)

将元素拼接成字符串:arr.join(‘—‘)//每两个元素之间都会出现拼接的符号

截取元素返回新数组:arr.slice(1,4)//相当于数学[1,4)

倒叙:arr.reverse()

合并数组:arr4.concat(arr5,arr6)

数组元素排序,返回排序之后的新数组

  1. var arr7 = [12,5,14,3,2,54,28,36];<br /> var res4 = arr7.sort();<br /> console.log(res4);
  2. // 自定义排序规则 升序 降序<br /> var res5 = arr7.sort(function (a,b) {<br /> // a,b 表示数组中正在比较的两个元素<br /> if(a > b){<br /> return -1; //交换两个元素的位置<br /> }else{<br /> return 1; //不交换位置<br /> }<br /> });
  1. <script>
  2. var arr = ['a','b','c','d'];
  3. // 1.增加新元素
  4. // 末尾追加
  5. arr.push("hello");
  6. // 开头追加
  7. arr.unshift("world")
  8. // 2.删除元素
  9. // 末尾删除
  10. arr.pop()
  11. // 开头删除
  12. arr.shift()
  13. // 3.删除、插入、替换
  14. // 从某个位置开始,删除几位
  15. // arr.splice(1,2)
  16. // 从某个位置开始,删除几位,并插入元素
  17. arr.splice(1,1,'e','f','g')
  18. console.log(arr);
  19. // 4.将数组中的元素拼接成字符串,返回拼接之后的字符串
  20. var arr2 = ['苹果','香蕉','葡萄'];
  21. // '苹果/香蕉/葡萄'
  22. var res1 = arr2.join('/');
  23. console.log(res1);
  24. // 5.截取数组中的元素,返回一个新数组
  25. var arr3 = [1,2,3,4,5,6];
  26. // 从哪开始,到哪结束(包含开始,不包含结束)
  27. var res2 = arr3.slice(1,4);
  28. console.log(res2);
  29. // 6.颠倒数组中元素的排列循序,返回一个新数组
  30. var res3 = arr3.reverse();
  31. console.log(res3);
  32. // 7.合并数组,返回合并之后的数组
  33. var arr4 = ['a','b'],arr5 = ['c','d'],arr6 = ['e','f'];
  34. var maxArr = arr4.concat(arr5,arr6);
  35. console.log(maxArr);
  36. // 8.数组元素排序,返回排序之后的新数组
  37. var arr7 = [12,5,14,3,2,54,28,36];
  38. var res4 = arr7.sort();
  39. console.log(res4);
  40. // 自定义排序规则 升序 降序
  41. var res5 = arr7.sort(function (a,b) {
  42. // a,b 表示数组中正在比较的两个元素
  43. if(a > b){
  44. return -1; //交换两个元素的位置
  45. }else{
  46. return 1; //不交换位置
  47. }
  48. });
  49. console.log(res5);
  50. // 例子 按照价格排序
  51. var goodList = [
  52. {
  53. name:"苹果",
  54. price:3.99
  55. },{
  56. name:"香蕉",
  57. price:2.99
  58. },{
  59. name:"橘子",
  60. price:5
  61. },{
  62. name:"葡萄",
  63. price:6.99
  64. },{
  65. name:"西瓜",
  66. price:2.58
  67. },{
  68. name:"李子",
  69. price:2.78
  70. },
  71. ]
  72. // 降序
  73. var goodList2 = goodList.sort(function (item1,item2) {
  74. if (item1.price > item2.price) {
  75. return -1; //不交换位置
  76. }else{
  77. return 1; //交换位置
  78. }
  79. });
  80. console.log(goodList2);
  81. </script>

image.png

数组常用API

Array.from(arrLike,callback):转换成数组

把一个类似数组的数据转换为真正的数组,返回转换后的新数组也可以对返回的新数组进行二次操作,具体操作方式可以写在第二个参数中Array.from(arrLike,function(ele,i){}),ele是返回的数组元素,i是索引
这也是一个回调函数,用来操作每个元素,将处理好的元素值放到一个新数组中

forEach(): 遍历数组

arr1.forEach(function(ele,i,array){})只能遍历数组arr1,回调函数的三个参数的意义 ele是返回的数组元素,i是索引,数组本身;这三个参数使用写,不使用可以不写,具体的操作写在回调函数中,比如绑定个点击事件。

map(callback): 映射

改变
对数组中的每一个元素运行指定操作,返回操作之后的结果,返回一个新数组
newArr=arr1.map(function(ele,i){return ele+i})

filter(callback)

过滤,筛选满足指定条件的元素,并返回一个数组
这是一个静态的方法,只能通过构造函数去访问
var arr2 = [5,16,3,26,8,9,10,4,17];
newArr = arr2.filter(function(ele){
return ele > 10
});
console.log(newArr);

some(callback)

判断是否存在满足指定条件的元素(无改变,过滤筛选),返回布尔值
var result = arr2.some(function(ele){
return ele.score < 60
});
console.log(result);

find()

返回第一个满足条件的元素

findIndex()

返回第一个满足条件索引
result = arr2.find(function(ele){});
console.log(result);

includes()

判断数组中是否包含某个元素,返回布尔值
arr.includes(XXX)

  1. <body>
  2. <ul>
  3. <li>1</li>
  4. <li>2</li>
  5. <li>3</li>
  6. <li>4</li>
  7. <li>5</li>
  8. </ul>
  9. <script>
  10. var lis = document.getElementsByTagName('li');
  11. console.log(lis);
  12. // 1. Array.from(arrLike,callback) :把一个类数组转换为真正的数组,返回转换之后的新数组。
  13. var arr_lis = Array.from(lis);
  14. console.log(arr instanceof Array);
  15. // 回到函数:用来操作每个元素,将处理好的元素值放在一个新数组中
  16. var str = 'abcdeg';
  17. var arr = Array.from(str,function(ele,i){
  18. // console.log(ele,i);
  19. return ele + (i+1)
  20. })
  21. console.log(arr);
  22. // 2. forEach(callback) 遍历数组
  23. var arr1 = ['a','b','c'];
  24. arr1.forEach(function(ele,i,array){
  25. console.log(ele,i,array);
  26. })
  27. arr_lis.forEach(function(ele,i){
  28. ele.onclick = function(){
  29. this.style.color = 'red'
  30. }
  31. })
  32. // 3. map(callback) 映射
  33. // 对数组中的每一个元素运行指定的操作,返回每次操作之后的结果,并将其组成一个新数组。
  34. var newArr = arr1.map(function(ele,i){
  35. return ele + i
  36. });
  37. console.log(newArr);
  38. // 4.filter(callback)
  39. // 过滤、筛选数组中满足指定条件的元素,并返回一个新数组
  40. var arr2 = [5,16,3,26,8,9,10,4,17];
  41. newArr = arr2.filter(function(ele){
  42. return ele > 10
  43. });
  44. console.log(newArr);
  45. arr2 = ['王五','张三','王二麻子','李四','王小二'];
  46. newArr = arr2.filter(function(ele){
  47. var reg = /^王/;
  48. return reg.test(ele)
  49. });
  50. console.log(newArr);
  51. arr2 = [{name:'张三1',score:78},{name:'张三2',score:56},{name:'张三3',score:99},{name:'张三4',score:16},{name:'张三5',score:61}];
  52. newArr = arr2.filter(function(ele){
  53. return ele.score > 60;
  54. });
  55. // some(callback)
  56. // 判断数组中是否存在满足指定条件的元素,返回布尔值
  57. var result = arr2.some(function(ele){
  58. return ele.score < 60
  59. });
  60. console.log(result);
  61. // find() 查找第一个满足条件的元素
  62. // findIndex() 查找第一个满足条件的元素索引。
  63. result = arr2.find(function(ele){
  64. return ele.score < 60
  65. });
  66. console.log(result);
  67. // includes() 判断数组中是否包含某个元素。
  68. var arr3 = [1,2,3,4,5];
  69. console.log(arr3.includes(5));
  70. </script>
  71. </body>
  72. </html>

对象

对象:以键值对形式存储数据

取值采用打点的方式
修改属性值直接重新赋值
新增属性也是直接打点赋值

对象的方法

  1. <script>
  2. // 函数 方法
  3. // 对象 属性:描述对象的静态特征 方法:表示对象的动态行为
  4. var person = {
  5. name: "张三",
  6. age:18,
  7. isMale:true,
  8. // 对象的方法
  9. speak:function(lang){
  10. alert(lang);
  11. }
  12. }
  13. // 打点
  14. // person.name
  15. // 调用对象的方法
  16. person.speak("中文");
  17. // 数组对象的方法
  18. var arr = [1,2,3]
  19. // arr.pop()
  20. var str = arr.join('-');
  21. console.log(str);
  22. console.log(typeof str);
  23. </script>

遍历for in

  1. // 遍历对象 for in
  2. // const 声明常量的关键字
  3. for (var key in car) {
  4. // 变量 key 指代的是对象中的 键
  5. console.log(key);
  6. console.log(typeof key);
  7. console.log('-----------');
  8. // 根据 键 取 值,在这里中能采用 [] 的方式
  9. // console.log(car[key]);
  10. // car.key 不能采用 打点的形式
  11. // console.log(car.key); //undefined
  12. }

统计数组中元素的出现次数

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. /*
  12. 统计的过程中会出现两种情况:
  13. 1.元素首次出现,在对象中新增一个属性,值1;
  14. 2.元素不是首次出现,在原本的基础上,值+1.
  15. */
  16. var arr = ['a','d','y','d','y','e','a','y'];
  17. var obj = {}; //准备一个空对象
  18. // 开始统计
  19. for(var i=0;i<arr.length;i++){
  20. var item = arr[i];
  21. // 如何判断该元素是否是首次出现
  22. // =>判断 对象中是否存在 某个属性(数组中是否存在某个元素)
  23. var flag = false;// 银针
  24. for(var key in obj){
  25. if (key == item) { //证明对象中存在该属性
  26. flag = true;
  27. break;
  28. }
  29. }
  30. if (flag == false) { //对象中不存在某属性 (首次出现)
  31. obj[item] = 1; //给对象新增属性,属性值:1
  32. } else {
  33. // 对象中存在某个属性(不是首次出现)
  34. obj[item] = obj[item] + 1; //获取属性值后,在原来的基础上+1
  35. }
  36. }
  37. console.log(obj);
  38. </script>
  39. </body>
  40. </html>
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 统计结果:{a:2,b:1}
  12. // 变形-统计结果:[{code:"a",count:2},{code:"b",count:1}]
  13. var arr = ['a','s','d','e','s','a','e','s'];
  14. var resArr = []; //用来存放统计结果
  15. // 开始统计
  16. for(var i=0;i<arr.length;i++){
  17. var item = arr[i];
  18. // 判断 当前元素item是否在resArr中出现过
  19. var flag = false; //银针的初始状态
  20. for(var j=0;j<resArr.length;j++){
  21. if(item == resArr[j].code){
  22. flag = true;
  23. // 不是首次出现
  24. // resArr[j].count++
  25. break;
  26. }
  27. }
  28. if(flag == false){
  29. // 首次出现
  30. // 往数组中新增元素???
  31. // resArr[resArr.length] = {code:item,count:1}
  32. resArr.push({code:item,count:1})
  33. }else{
  34. // 不是首次出现
  35. resArr[j].count++;
  36. }
  37. }
  38. console.log(resArr);
  39. // 排序sort 方法是在原来数组的基础上进行修改,返回修改之后的数组。
  40. resArr.sort(function (a,b) {
  41. if (a.count < b.count) {
  42. return 1; //交换位置
  43. } else {
  44. return -1; //不交换位置
  45. }
  46. });
  47. console.log(resArr);
  48. </script>
  49. </body>
  50. </html>

产生几个不重复的随机数

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. var arr = [0,1,2,3,4,5,6,7,8,9,'a','b','d','e','f','j'];
  12. // 1. 随机 索引
  13. // 2. 不重复
  14. // 3. 6个数
  15. for(var i=0;i<6;i++){
  16. // 1.产生一个随机数 [0 arr.legnth-1]
  17. var randomNum = Math.ceil(Math.random()*(arr.length - 1));
  18. // 把随机数作为索引,从arr中取元素
  19. var item = arr[randomNum];
  20. document.write(`<span>${item}</span>`)
  21. // 2.不重复,将已经取过的元素从数组中删除
  22. arr.splice(randomNum,1)
  23. }
  24. // 产生 0-9之间 6个不重复的随机数
  25. var arr1 = []
  26. while(arr1.length != 6){
  27. // 1.产生0-9之间的随机数
  28. var randomNum = Math.floor(Math.random()*10);
  29. // 2.判断 此次产生的随机数是否在数组中存在
  30. var flag = false;
  31. for(var i=0;i<arr1.length;i++){
  32. if(randomNum == arr1[i]){
  33. flag = true;
  34. break;
  35. }
  36. }
  37. if(flag == false){
  38. arr1.push(randomNum);
  39. }
  40. }
  41. console.log(arr1);
  42. </script>
  43. </body>
  44. </html>

数组的对象中的字段进行去重,再对某些属性值累加(合并相同项,并对其他字段进行累加)

  1. let newArray = this.list.reduce((a, b, index) => {
  2. //type是合并的相同字段,allmoney是需要进行累加的字段
  3. let hasValue = a.findIndex(r => {
  4. return r.type === b.type
  5. })
  6. hasValue === -1 && a.push(b)
  7. hasValue !== -1 && (a[hasValue].allmoney = a[hasValue].allmoney + b.allmoney)
  8. return a
  9. }, [])
  10. console.log("合并累加后",newArray)
  11. this.xList = newArray.map(item => {
  12. return item.type
  13. })
  14. console.log("合并累加后x",this.xList)
  15. this.yList = newArray.map(item => {
  16. return item.allmoney
  17. })