- 数组
- 数组 可以有序的存储一组数据,每个数据对应的有索引 可以根据索引访问数组中的数据
- 增加元素:开头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)
- 数组元素排序,返回排序之后的新数组
- 数组常用API
- 对象
数组
数组 可以有序的存储一组数据,每个数据对应的有索引 可以根据索引访问数组中的数据
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)
数组元素排序,返回排序之后的新数组
var arr7 = [12,5,14,3,2,54,28,36];<br /> var res4 = arr7.sort();<br /> console.log(res4);
// 自定义排序规则 升序 降序<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 /> });
<script>
var arr = ['a','b','c','d'];
// 1.增加新元素
// 末尾追加
arr.push("hello");
// 开头追加
arr.unshift("world")
// 2.删除元素
// 末尾删除
arr.pop()
// 开头删除
arr.shift()
// 3.删除、插入、替换
// 从某个位置开始,删除几位
// arr.splice(1,2)
// 从某个位置开始,删除几位,并插入元素
arr.splice(1,1,'e','f','g')
console.log(arr);
// 4.将数组中的元素拼接成字符串,返回拼接之后的字符串
var arr2 = ['苹果','香蕉','葡萄'];
// '苹果/香蕉/葡萄'
var res1 = arr2.join('/');
console.log(res1);
// 5.截取数组中的元素,返回一个新数组
var arr3 = [1,2,3,4,5,6];
// 从哪开始,到哪结束(包含开始,不包含结束)
var res2 = arr3.slice(1,4);
console.log(res2);
// 6.颠倒数组中元素的排列循序,返回一个新数组
var res3 = arr3.reverse();
console.log(res3);
// 7.合并数组,返回合并之后的数组
var arr4 = ['a','b'],arr5 = ['c','d'],arr6 = ['e','f'];
var maxArr = arr4.concat(arr5,arr6);
console.log(maxArr);
// 8.数组元素排序,返回排序之后的新数组
var arr7 = [12,5,14,3,2,54,28,36];
var res4 = arr7.sort();
console.log(res4);
// 自定义排序规则 升序 降序
var res5 = arr7.sort(function (a,b) {
// a,b 表示数组中正在比较的两个元素
if(a > b){
return -1; //交换两个元素的位置
}else{
return 1; //不交换位置
}
});
console.log(res5);
// 例子 按照价格排序
var goodList = [
{
name:"苹果",
price:3.99
},{
name:"香蕉",
price:2.99
},{
name:"橘子",
price:5
},{
name:"葡萄",
price:6.99
},{
name:"西瓜",
price:2.58
},{
name:"李子",
price:2.78
},
]
// 降序
var goodList2 = goodList.sort(function (item1,item2) {
if (item1.price > item2.price) {
return -1; //不交换位置
}else{
return 1; //交换位置
}
});
console.log(goodList2);
</script>
数组常用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)
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script>
var lis = document.getElementsByTagName('li');
console.log(lis);
// 1. Array.from(arrLike,callback) :把一个类数组转换为真正的数组,返回转换之后的新数组。
var arr_lis = Array.from(lis);
console.log(arr instanceof Array);
// 回到函数:用来操作每个元素,将处理好的元素值放在一个新数组中
var str = 'abcdeg';
var arr = Array.from(str,function(ele,i){
// console.log(ele,i);
return ele + (i+1)
})
console.log(arr);
// 2. forEach(callback) 遍历数组
var arr1 = ['a','b','c'];
arr1.forEach(function(ele,i,array){
console.log(ele,i,array);
})
arr_lis.forEach(function(ele,i){
ele.onclick = function(){
this.style.color = 'red'
}
})
// 3. map(callback) 映射
// 对数组中的每一个元素运行指定的操作,返回每次操作之后的结果,并将其组成一个新数组。
var newArr = arr1.map(function(ele,i){
return ele + i
});
console.log(newArr);
// 4.filter(callback)
// 过滤、筛选数组中满足指定条件的元素,并返回一个新数组
var arr2 = [5,16,3,26,8,9,10,4,17];
newArr = arr2.filter(function(ele){
return ele > 10
});
console.log(newArr);
arr2 = ['王五','张三','王二麻子','李四','王小二'];
newArr = arr2.filter(function(ele){
var reg = /^王/;
return reg.test(ele)
});
console.log(newArr);
arr2 = [{name:'张三1',score:78},{name:'张三2',score:56},{name:'张三3',score:99},{name:'张三4',score:16},{name:'张三5',score:61}];
newArr = arr2.filter(function(ele){
return ele.score > 60;
});
// some(callback)
// 判断数组中是否存在满足指定条件的元素,返回布尔值
var result = arr2.some(function(ele){
return ele.score < 60
});
console.log(result);
// find() 查找第一个满足条件的元素
// findIndex() 查找第一个满足条件的元素索引。
result = arr2.find(function(ele){
return ele.score < 60
});
console.log(result);
// includes() 判断数组中是否包含某个元素。
var arr3 = [1,2,3,4,5];
console.log(arr3.includes(5));
</script>
</body>
</html>
对象
对象:以键值对形式存储数据
取值采用打点的方式
修改属性值直接重新赋值
新增属性也是直接打点赋值
对象的方法
<script>
// 函数 方法
// 对象 属性:描述对象的静态特征 方法:表示对象的动态行为
var person = {
name: "张三",
age:18,
isMale:true,
// 对象的方法
speak:function(lang){
alert(lang);
}
}
// 打点
// person.name
// 调用对象的方法
person.speak("中文");
// 数组对象的方法
var arr = [1,2,3]
// arr.pop()
var str = arr.join('-');
console.log(str);
console.log(typeof str);
</script>
遍历for in
// 遍历对象 for in
// const 声明常量的关键字
for (var key in car) {
// 变量 key 指代的是对象中的 键
console.log(key);
console.log(typeof key);
console.log('-----------');
// 根据 键 取 值,在这里中能采用 [] 的方式
// console.log(car[key]);
// car.key 不能采用 打点的形式
// console.log(car.key); //undefined
}
统计数组中元素的出现次数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
/*
统计的过程中会出现两种情况:
1.元素首次出现,在对象中新增一个属性,值1;
2.元素不是首次出现,在原本的基础上,值+1.
*/
var arr = ['a','d','y','d','y','e','a','y'];
var obj = {}; //准备一个空对象
// 开始统计
for(var i=0;i<arr.length;i++){
var item = arr[i];
// 如何判断该元素是否是首次出现
// =>判断 对象中是否存在 某个属性(数组中是否存在某个元素)
var flag = false;// 银针
for(var key in obj){
if (key == item) { //证明对象中存在该属性
flag = true;
break;
}
}
if (flag == false) { //对象中不存在某属性 (首次出现)
obj[item] = 1; //给对象新增属性,属性值:1
} else {
// 对象中存在某个属性(不是首次出现)
obj[item] = obj[item] + 1; //获取属性值后,在原来的基础上+1
}
}
console.log(obj);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 统计结果:{a:2,b:1}
// 变形-统计结果:[{code:"a",count:2},{code:"b",count:1}]
var arr = ['a','s','d','e','s','a','e','s'];
var resArr = []; //用来存放统计结果
// 开始统计
for(var i=0;i<arr.length;i++){
var item = arr[i];
// 判断 当前元素item是否在resArr中出现过
var flag = false; //银针的初始状态
for(var j=0;j<resArr.length;j++){
if(item == resArr[j].code){
flag = true;
// 不是首次出现
// resArr[j].count++
break;
}
}
if(flag == false){
// 首次出现
// 往数组中新增元素???
// resArr[resArr.length] = {code:item,count:1}
resArr.push({code:item,count:1})
}else{
// 不是首次出现
resArr[j].count++;
}
}
console.log(resArr);
// 排序sort 方法是在原来数组的基础上进行修改,返回修改之后的数组。
resArr.sort(function (a,b) {
if (a.count < b.count) {
return 1; //交换位置
} else {
return -1; //不交换位置
}
});
console.log(resArr);
</script>
</body>
</html>
产生几个不重复的随机数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var arr = [0,1,2,3,4,5,6,7,8,9,'a','b','d','e','f','j'];
// 1. 随机 索引
// 2. 不重复
// 3. 6个数
for(var i=0;i<6;i++){
// 1.产生一个随机数 [0 arr.legnth-1]
var randomNum = Math.ceil(Math.random()*(arr.length - 1));
// 把随机数作为索引,从arr中取元素
var item = arr[randomNum];
document.write(`<span>${item}</span>`)
// 2.不重复,将已经取过的元素从数组中删除
arr.splice(randomNum,1)
}
// 产生 0-9之间 6个不重复的随机数
var arr1 = []
while(arr1.length != 6){
// 1.产生0-9之间的随机数
var randomNum = Math.floor(Math.random()*10);
// 2.判断 此次产生的随机数是否在数组中存在
var flag = false;
for(var i=0;i<arr1.length;i++){
if(randomNum == arr1[i]){
flag = true;
break;
}
}
if(flag == false){
arr1.push(randomNum);
}
}
console.log(arr1);
</script>
</body>
</html>
数组的对象中的字段进行去重,再对某些属性值累加(合并相同项,并对其他字段进行累加)
let newArray = this.list.reduce((a, b, index) => {
//type是合并的相同字段,allmoney是需要进行累加的字段
let hasValue = a.findIndex(r => {
return r.type === b.type
})
hasValue === -1 && a.push(b)
hasValue !== -1 && (a[hasValue].allmoney = a[hasValue].allmoney + b.allmoney)
return a
}, [])
console.log("合并累加后",newArray)
this.xList = newArray.map(item => {
return item.type
})
console.log("合并累加后x",this.xList)
this.yList = newArray.map(item => {
return item.allmoney
})