视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js能力测评经典题中分析数组类型的用法_附代码
2020-11-27 19:33:11 责编:小采
文档


最近在做中的js能力测评经典题,因此按照自己的能力和想法进行了总结,此篇文章主要是数组类的总结。

1、找出元素item在给定数组中的位置:arr.indexOf(item);

2、计算给定数组arr中所有元素的总和:arr.forEach(function(e){sum=sum+e;})


注:数组名.forEach(function(数组元素,元素索引,额外定义的数组){函数体}) //返回的仍是调用的数组

数组名.map(function(数组元素){函数体}) //返回的是新数组,它不修改调用的数组;

3、移除数组arr中的所有制与item相等的元素,不要直接修改数组arr,结果返回新的数组。

function remove(arr, item) {
 var newArray=[];
 arr.forEach(function(e){
 if(e!=item){
 newArray.push(e);
 }
 })
 return newArray;
}

4、移除数组arr中的所有与item相等的元素,直接在给定的数组上修改,并将结果返回。

//方法一:从前往后遍历删除元素
function removeWithoutCopy(arr,item){
 for(i=0;i<arr.length;i++){
 if(item==arr[i]){
 arr.splice(i,1); //splice(定位元素索引[,删除元素个数,添加元素])
 i--;//i--的目的是因为删除了一个元素,在回到for时需要i++,会跳过一个元素
 }
 }
}

//方法二:从后往前遍历删除元素
function removeWithoutCopy(arr,item){
 for(i=arr.length-1;i>=0;i--){
 if(item==arr[i]){
 arr.splice(i,1); //删除时无需进行位移
 }
 }
}

注:数组名.splice(索引[,个数,添加元素]),splice意味着直接在原有数组上进行修改,返回值为删除元素组成的数组。例:var a=[1,2,3,4,5];a.splice(3,1)//返回[4],a为[1,2,3,5]

5、在数组arr末尾添加元素item,不要直接在arr上修改,返回新的数组。

//方法一:直接使用数组的concat追加新的item,并返回新的数组
function append(arr, item) {
 return arr.concat(item);
}

//方法二:利用slice对原数组进行切分,产生新的数组,在对新数组进行push即可
function append(arr, item) {
 var newArray=arr.slice(0);
 newArray.push(item);
 return newArray;
}
//方法三:利用数组的map创建新的数组,最后对新数组push(item)即可
function append(arr, item) {
 var newArray=arr.map(function(e){
 return e;
 })
 newArray.push(item);
 return newArray;
}
//方法四:定义一个空数组,利用for/forEach进行赋值,再对新数组push(item)即可
function append(arr, item) {
 var newArray=[];
 arr.forEach(function(e){
 newArray.push(e);
 })
 newArray.push(item);
 return newArray;
}

6、删除数组arr最后一个元素,不要直接修改数组arr,结果返回新的数组:return arr.slice(0,arr.length-1);

7、在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组:var newArray=arr.slice(0);newArray.unshift(item)

8、删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组:return arr.slice(1);

9、合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组:return arr1.concat(arr2);

10、在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组:var newArray = arr.slice(0); newArray.splice(index,0,item); return newArray;

11、统计数组 arr 中值等于 item 的元素出现的次数。

function count(arr, item) {
 var count=0;
 arr.forEach(function(e){
 if(e==item)
 count+=1;
 });
 return count;
}

12、找出数组 arr 中重复出现过的元素。输入:[1, 2, 4, 4, 3, 3, 1, 5, 3]。输出:[1, 3, 4]。

//方法一:利用indexOf和lastIndexOf进行判断
function duplicates(arr) {
 var result=[];
 arr.forEach(function(e){
 if(arr.indexOf(e)!=arr.lastIndexOf(e) && result.indexOf(e)==-1){
 result.push(e);
 }
 });
 return result;
}

//方法二:利用双重for循环进行判断
function duplicates(arr) {
 var result=[];
 for(i=0;i<arr.length-1;i++){
 for(k=0;k<result.length;k++){
 if(arr[i]==result[k])
 break;
 }
 if(k!=result.length) continue;
 for(j=i+1;j<arr.length;j++){
 if(arr[i]==arr[j]){
 result.push(arr[i]);
 break;
 }
 }
 }
 return result;
}

13、为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组。

//方法一:定义空数组,对arr进行遍历赋值
function square(arr) {
 var newArr=[];
 arr.forEach(function(e){
 newArr.push(e*e);
 });
 return newArr;
}
//方法二:直接使用map产生新的数组
function square(arr) {
 return arr.map(function(e){
 return e*e;
 })
}

14、在数组 arr 中,查找值与 item 相等的元素出现的所有位置

function findAllOccurrences(arr, target) {
 var newArray=[];
 arr.forEach(function(e,i){
 if(e==target) newArray.push(i);
 })
 return newArray;
}

在js经典题中,以上便是所有数组的题型,接下来便是编码规范、函数模块。

下载本文
显示全文
专题