提示:如有侵权,请告知
数组小练习
前言
学习js,数组题目练习
一、数组是什么?
数组是指一组数据的集合,它也是个对象,其中每个数据被称为元素,在数组中可以存放任意类型的元素,数组是将一组数据存储在单个变量名下的优雅方式
二、练习
1.熟悉js数组部分方法
方法如下:
1.push() 末尾加元素,返回值是新数组长度
2.unshift() 开头加元素,返回新数组长度
3.pop() 删除数组最后一个元素,并返回该元素的值(删哪个返回哪个)
4.shift() 删除第一个元素,并返回该元素的值
5.sort() 数组排序,先转成字符串,再比较Unicode编码,所以数字排序可能会出错,可以自己指定排序规则
sort()里加回调函数,指定规则
回调函数有两个形参,浏览器分别使用数组的元素作为实参去调用回调函数,但是哪个元素调用不确定,但是肯定再数组中且a在b前面
回调函数返回值决定元素顺序, 返回值>0——>元素交换位置
返回值<=0——>不交换
arrayObject.sort(sortby);参数sortby可选。规定排序顺序,必须是函数。
如果需要升序,则返回a-b
如果需要降序排列,则返回b-a
arr5.sort((a, b) => a - b);
6.splice() 添加/删除数组元素
会影响到原数组,会将指定元素从原数组中删除,并将删除的元素作为返回值返回
用法:array.splice(start,deleteCount,item…)
-参数:
第一个,表示开始位置的索引
第二个,表示删除的数量
第三个及以后…
可以传递一些新的元素,这些元素将会自动插入到开始位置,索引前边
7.slice() 从数组中提取指定元素,不改变原数组,将提取值放入新数组中返回
用法:array.slice(start,end)
参数:start是截取的开始数组索引
end参数等于你要取的最后一个字符的位置值加上1(可选)
即【start,end)
-索引可以传递一个负值,如果传递一个负值,则从后往前计算
-1:倒数第一个,-2:倒数第二个
8.indexOf() 可以在字符串和数组上使用。
可返回某个指定的字符串值(基本数据类型)在字符串、数组中第一次出现的位置。如果不存在,则返回-1
9.lastIndexOf()
——返回指定元素在数组中的最后一个索引,如果不存在,返回-1
10.concat() 连接两个及以上数组,不改变原数组,并将新的数组返回
11.reverse() 颠倒数组中元素的顺序,原数组改变
12.jion() 数组转成一个字符串,不改变原数组,返回值为转化后的字符串
可以指定一个字符串作为参数,成为转化后的字符串的分隔符
默认使用逗号作为分隔符
13.forEach() 用于调用数组的每个元素,并将元素传递给回调函数
forEach方法中的function回调有三个参数:
第一个参数是遍历的数组内容,
第二个参数是对应的数组索引,
第三个参数是数组本身
forEach 方法没有返回值,而且它也不会改变原数组
14.some() 判断数组中是否存在满足条件的项,只要有一项满足,返回true
var arr2 = arr1.some(x => {
return x < 3;
});
console.log(arr2); // true
15.map() 返回一个新数组,数组中的元素是原数组元素调用函数处理后的值
let arr13 = [1, 2, 3, 4, 5, 6];
let item5 = arr13.map((item) => {return item + 100;
});
console.log(item5); // [101, 102, 103, 104, 105, 106]
console.log(arr13); // [1, 2, 3, 4, 5, 6]
16.reduce() 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
let arr12 = [1, 2, 3, 4, 5, 6];
let item4 = arr12.reduce((total,currentValue)=>{return total + currentValue;
}, 0);
console.log(item4); // 21
console.log(arr12); // [1, 2, 3, 4, 5, 6]
17.split() 使用指定的分割符字符串将一个string对象分成子字符串数组
以指定分割符决定拆分位置
var res=“red,hello,1,3,4”;
var arr4=res.split(‘,’)
console.log(arr4, “arr4”);
2.练习
题目:
1、将数组[2,4,6,8,10]的内容反过来存放,输出[10,8,6,4,2]
var arr = [2,4,6,8,10];
var newarr = [];
for(var i=arr.length-1;i>=0;i--){
newarr[newarr.length] = arr[i];
}
alert(arr+'反过来存放,输出为'+newarr);
2、数组排列,把一组数据按从大到小排列(冒泡排序)。
var arrs=[],num;
var newarr = [],temp;
for(var i=1;i<=arrs.length+1;i++){
num=prompt('输入数组第'+i+'个值'+'\n提示:当输入*break*时,结束输入');
if(num=='*break*'){
break;
}
arrs[arrs.length]=num;
newarr[newarr.length]=num;
}
for(var i =0;i<newarr.length-1;i++){
for(var j =0;j<newarr.length-1-i;j++){
if(newarr[j+1]>=newarr[j]){
temp=newarr[j];
newarr[j]=newarr[j+1];
newarr[j+1]=temp;
}
}
}
alert('数组:'+arrs+'\n从大到小排列结果为:'+newarr);
- 已知有字符串 foo=”get-element-by-id”,写一个 function 将其转化成驼峰表示法”getElementById”。
var foo='get-element-by-id';
var res=''
function getArr(foo){
var flag=false;
for(let i=0;i<foo.length;i++){
if(foo[i]=='-'){
//当遇到 - 就标记,意思下一个就要变大写,
flag=true;
}
// 这个就是 - 后面一个字符要走的代码
else {
if(flag){
res+=foo[i].toUpperCase();
// 这里修改为大写,一定记得让flag恢复,否则,永远会出现全部都大写的情况
flag=false;
}
else {
res+=foo[i];
}
}
}
return res;
}
console.log(getArr(foo));
4、弹出框接收N位评委的打分,去掉一个最高分和一个最低分,求最后的平均分。
var arrs=[],num,N;
var newarr = [],temp;
for(var i=1;i<=arrs.length+1;i++){
num=prompt('输入数组第'+i+'个评委的打分'+'\n提示:当输入*break*时,结束输入');
if(num=='*break*'){
N = i-1;//接受到正确评分的人数
break;
}
arrs[arrs.length]=num;
newarr[newarr.length]=num;
}
for(var i =0;i<newarr.length-1;i++){
for(var j =0;j<newarr.length-1-i;j++){
if(newarr[j+1]>=newarr[j]){
temp=newarr[j];
newarr[j]=newarr[j+1];
newarr[j+1]=temp;
}
}
}
newarr.shift();//去掉一个最高分
newarr.pop();//去掉一个最低分
var sum = average = 0;
for(var i = 0;i<newarr.length;i++){
sum += +newarr[i];
}
average = sum/newarr.length;
alert(`接收到${N}位评委的打分,去掉一个最高分和一个最低分后\n平均分为:${average}`);
5、把下面数组的首尾两个元素互换
var arr = ["鹿晗","王俊凯","蔡徐坤","彭于晏","周杰伦","刘德华","赵本山"];
var newarr = arr.slice(1,arr.length-1);
newarr.unshift(arr[arr.length-1]);
newarr.push(arr[0]);
alert('首尾两个元素互换:\n'+'原数组: '+arr+'\n新数组:'+newarr);
6、封装一个函数,判断某个值是否存在某个数组里面。
function Pd(num,arr){
var res = arr.indexOf(num);
if(res>=0){
alert(num+' 在数组'+arr+' 中存在');
}else{
alert(num+' 在数组'+arr+' 中不存在');
}
}
var arrs=[],num,nums;
nums=prompt('你想判断哪个值在数组中存不存在?');
for(var i=0;i<arrs.length+1;i++){
num=prompt('数组第'+(i+1)+'个值');
if(num=='*break*'){
break;
}
arrs[arrs.length]=num;
}
Pd(nums,arrs);
总结
以上就是今天的小练习