文档章节

面试题数组篇(1)

bling-兴哥
 bling-兴哥
发布于 2016/05/23 15:00
字数 1093
阅读 23
收藏 0

前端面试中,数组是少不了的。因为数组使用度比较频繁,我在项目中就经常使用。JavaScript拼接Html,数据结构计算,等等。

汇总一下面试中数组会问到的几个问题,这个问题在面试经常被问到,但是一般同学都不太熟悉。不全面的大家可以留言补充。

 

1、数组有哪些方法,常用的有哪几个

 

Array 对象属性

属性 描述
constructor 返回对创建此对象的数组函数的引用。
length 设置或返回数组中元素的数目。
prototype 使您有能力向对象添加属性和方法。

Array 对象方法 (14个,前面9个都比较常用)

方法 描述
concat() 连接两个或更多的数组,并返回结果。
join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop() 删除并返回数组的最后一个元素
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
reverse() 颠倒数组中元素的顺序。
shift() 删除并返回数组的第一个元素
slice() 从某个已有的数组返回选定的元素
sort() 对数组的元素进行排序
splice() 删除元素,并向数组添加新元素。
toSource() 返回该对象的源代码。
toString() 把数组转换为字符串,并返回结果。
toLocaleString() 把数组转换为本地数组,并返回结果。
unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
valueOf() 返回数组对象的原始值

表格摘自w3school网站,点击方法和属性,可以链接到网站查看。

这些方法通过传递不同参数,可以达到意外的效果,请看第二个问题。

 

2、js中对数组的clone

 

clone即克隆,就是复制一个数组:

var ary = [1,2,3];

var ary1 = ary.concat(); // 第一种方法

var ary2 = ary.slice(0);  // 第二种方法

var ary3 = ary; // 这个不是复制,这个是引用

这两种方法复制的数组是一个新数组,原数组的值改变了,新数组不会受到影响。

 

3、 查找一个字符串中出现次数最多的字符,统计这个次数

 

第一种方法:

先说一下思路:先定义一个空对象,将字符串中的字符作为对象的属性,就可以统计出次数了。然后找出对象中各个属性的最大值。

// 字符串可以用单引号,也可以用双引号

var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds';

var obj = {};

// 处理字符串字符,给对象做属性用

for(var i=0;i<str.length;i++){

    // 中括号调用,数组是下标,对象是属性,obj.name 和 obj['name']

    if(obj[str.charAt(i)]){

        // 如果对象有这个属性了,就给这个属性值自增1

        obj[str.charAt(i)]++;

    }else{

        // 如果对象没有这个属性,就给这个属性值设为1

        obj[str.charAt(i)] = 1;

    }

}

// 找出对象属性中最多次数

var times = 0;

var value = '';

// for in 是另一种for循环,可以用于遍历对象的属性和方法

for(var i in obj){

    if(obj[i]>times){

        times = obj[i];

        value = i;

    }

}

// 最多次数保存在times中了,字符保存在value中了

 

第二种方法:

先说一下思路:使用正则表达式,匹配字符串,同时计数。

var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds';

var obj = {};

str.replace(/(.)\1*/g,function(_,__){

    if(obj[__]){

        obj[__] += _.length;

    }else{

        obj[__] = _.length;

    }

});

var times = 0;

var value = '';

for(var i in obj){

    if(obj[i]>times){

        times = obj[i];

        value = i;

    }

}

 

4、 编写一个方法,去掉一个数组的重复元素

去掉重复记录和上面的字符重复次数统计思路类似,代码不重复了。

 

5、找出数组中最大值可以使用哪些方法

var ary = [1,25,16,32,43,26,13,28,19];

// 1、 for循环遍历,比较low,就不写了

// 2、 数组排序

ary.sort()[ary.length-1];

// 3、数组排序+截取

ary.sort().splice(-1)[0];

// 4、借用Math最大值方法

Math.max.apply(null,ary);

 

© 著作权归作者所有

bling-兴哥
粉丝 0
博文 13
码字总数 10623
作品 0
东丽
私信 提问
MoreWindows博客目录(微软最有价值专家,原创技术文章152篇)

为了方便大家查找和学习,现将本人博客中所有博客文章列出目录。 一. 白话经典算法 目前有17篇,分为七大排序和经典面试题讲解两大类 1. 《白话经典算法系列之一 冒泡排序的三种实现》 2. 《...

morewindows
2013/12/24
0
0
LeetCode 攻略 - 2019 年 8 月上半月汇总(109 题攻略)

LeetCode 汇总 - 2019/08/15 Create by jsliang on 2019-08-12 19:39:34 Recently revised in 2019-08-15 16:37:20 一 目录 不折腾的前端,和咸鱼有什么区别 目录 一 目录 二 前言 三 汇总 ...

jsliang
08/16
0
0
2018年6月前端面试经历(中)

前言 上一篇文章,写了一些出去面试会考到的笔试题,不是很全(哈哈哈,基本上都是靠脑子记的,有些都忘记了~) 传送门在这里:2018年6月前端面试经历(上)~~~ 这篇我会写出一些我碰到的算法...

我母鸡啊!
2018/07/05
0
0
前端面试 - 算法篇(二分法)

前段时间换了份工作,也经历了很多面试,最终通常都会扑在算法上 虽说前端是所有程序员中,对于算法的要求最低的一个岗位,但算法依旧是进阶的必修课 于是决定记录一下与算法相关的面试题,以...

WiseWrong
2018/08/15
0
0
让我印象深刻的 JavaScript 面试题

1.前言 对于一个web前端来说,面试的时候,难免会遇到javascript的面试题。就我自己而言。有几道面试题,有些是我面试遇到的,有些是在网上看到的,但是都印象深刻。今天就来简单分析一下我遇...

守候i
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部