js 面试题之---数组、字符串操作
1. 计算字符串中某个字符的个数
var aaa='1231011211009181';
function count(str){
var arr=[];
for(var i=0;i<str.length;i++){
if(str.charAt(i)=='1'){
arr.push(str.charAt(i));
}
}
return arr.length;
}
console.log(count(aaa));
2.数组去重
var arr=[1,1,1,2,2,1,3,1,3,4,5,6];
function arrDel(arr){
var result=[],
obj={};
for(var i in arr){
if(!obj[arr[i]]){ //判断对象的属性
result.push(arr[i]);
obj[arr[i]]=1;
}
}
return result;
}
console.log(arrDel(arr));
3. 数组冒泡排序
function bubbleSort(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
//获取前一个值和后一个值进行比较
if(arr[i]>arr[j]){
//创建中间变量 交换值
var cur=arr[j];
arr[j]=arr[i];
arr[i]=cur;
}
}
}
return arr;
}
4.数组快速排序
function quickSort(arr){
if(arr.length<=1){return arr};
//选基准值,可以是任意位置
var key=Math.floor(arr.length/2);
var keyValue=arr.splice(key,1)[0];
//定义两个数组
var left=[];
var right=[];
for(var i=0;i<arr.length;i++){
//小于基准的方左边、大于右边
if(arr[i]<keyValue){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
//递归
return quickSort(left).concat([keyValue],quickSort(right));
//return typeof keyValue;
}
var array=[5,1,6,4,10,11,15,0,2];
console.log(quickSort(array));
//console.log(bubbleSort(array));
5.json 对象数组排序
var data = [{
name: "海外事业部",
value: 0.58
}, {
name: "内销",
value: 0.36
}, {
name: "互联网中心",
value: 0.78
}];
function compare(a,b){
return b.value-a.value;
}
data.sort(compare);
console.log(data);
6.删除数组的第一个元素,不直接改变数组
var a=[2,1,3,4,5,8];
function delFirst(arr){
var arr2=arr.slice(0);
arr2.shift();
return arr2;
}
console.log(delFirst(a));
7.判断一个字符串中出现次数最多的字符,统计这个次数
var str='addddfffssdfsadfsdfsafjsd';
var json={}; //定义对象来存放 对象属性的值
//遍历字符串,将重复出现的字符 累加
for(var i=0;i<str.length;i++){
if(!json[str.charAt(i)]){
json[str.charAt(i)]=1;
}else{
json[str.charAt(i)]++;
}
}
var iMax=0;
var icur='';
console.log(json);//{a:3,d:8,f:7,s:6,j:1}
//遍历 json对象取最大值
for(var val in json){
if(json[val]>iMax){
iMax=json[val];
icur=val;
}
}
console.log('出现最多的字符:'+icur,'出现次数:'+iMax);
8.求一个字符串的字节长度(中文字符占两个字节)
var str='czj陈志杰';
function getStrLen(str){
var json={len:0};
var pattern=/[\u4e00-\u9fa5]/;//unicode编码符合中文字符
for(var i=0;i<str.length;i++){
if(pattern.test(str.charAt(i))){
json['len']++;
}
}
return json['len']+str.length;
}
console.log(getStrLen(str));
9.javascript面向对象中继承实现
子构造函数中执行父构造函数,并用call\apply改变this
克隆父构造函数原型上的方法
functionPerson(name){
this.name=name;
}
Person.prototype.showName=function(){
console.log(this.name);
}
Person.prototype.showJob=function(){
console.log(this.job);
}
function Student(name,job){
Person.apply(this,arguments);//改变this上下文环境
this.job=job;
}
for(var i in Person.prototype){
Student.prototype=Person.prototype;
}
newStudent('chenzhijie','student').showName();
newStudent('chenzhijie','student').showJob();
10.函数的链式调用 类似:add(1)(2)
function add(a){
var sum=a;
var tmp=function(y){
sum=sum+y;
return tmp;//为了完成链式调用
}
//以字符串的形式返回对象的原始值
tmp.toString=function(){
return sum;
};
return tmp;
}
console.log(add(1)(2)(3));//6
11. this的典型应用
事件: onclick this->触发事件的对象
构造函数: this->new 出来的object
call/apply : 改变this
12. 降低页面加载时间的方法
1. 压缩css 、js文件
2. 合并js、css文件 ,减少http请求
3. 外部js、css文件放在最底下
4.减少dom操作,尽可能用变量替代不必要的dom操作
13. Ajax工作原理
1.创建ajax对象
if(window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera,Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
2. 判断请求方式(get/post)
3. 打开连接 xmlhttp.open()
4. 发送 xmlhttp.send(null/data)
5. 当ajax对象完成第四步(onreadystatechange)数据接收完成,判断(xmlhttp.readyState==4)和http响应状态(status)200-300之间或者304(缓存)执行回调函数,返回数据xmlhttp.responseText
13. 数组排序,如[[1,2],[2,1],[1,3]]->[[1,2],[1,3],[2,1]]
vararr1=[[2,4],[1,2],[2,1],[1,3]];
function comparetwo(a,b){
if(a[0]!=b[0]){
return a[0]-b[0];
}else{
return a[1]-b[1];
}
}
var result=arr1.sort(comparetwo);
console.log(result);
14.HTTP与HTTPS的区别
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
15.查找数组中某元素的位置
function indexOf(arr,item){
for( vari=0;i<arr.length;i++){
if(arr[i]==item){returni;}
}
return -1;
}
var arr1=[1,2,3,4];
var result=indexOf(arr1,2);
console.log(result);
16.数组求和
function sum(arr) {
var sum=0;
arr.forEach(function(value){
sum+=value;
});
return sum;
}
var arr=[1,2,3,4];
console.log(sum(arr));
17.移除数组中的item 元素,不直接修改原先数组
function remove(arr,item){
var arr2=[];
arr.forEach(function(val){
if(val!=item){arr2.push(val);}
});
return arr2;
}
18.splice向/从数组中添加/删除项目,然后返回被删除的项目。
function remove2(arr,item){
var newarr = arr.slice(0);
for(vari=0;i<newarr.length;i++){
if(newarr[i] == item){
newarr.splice(i,1);
i--;//删除一个元素后,后面的元素会提前一位
}
}
return newarr;
}
19.改变原始数组
function remove3(arr,item){
for(vari=0;i<arr.length;i++){
if(arr[i] == item){
arr.splice(i,1);
i--;//删除一个元素后,后面的元素会提前一位
}
}
return arr;
}
var arr=[1,2,3,3,5,4,4,9];
console.log(remove2(arr,4));
20.添加元素 不直接修改原先数组
function append(arr, item) {
// return arr.push(item);
return arr.concat([item]);
}
var arr=[1,2,3,5];
console.log(append(arr,4));
21.删除数组的最后一个元素,不直接改变数组
function truncate(arr) {
var arr2=arr.slice(0);
arr2.pop();
return arr2;
}
function truncate2(arr) {
vararr2=arr.slice(0,arr.length-1);//返回一个新数组
return arr2;
}
var arr=[1,2,3,4,5];
console.log(truncate2(arr));//1,2,3,4
22.在数组开头添加元素,不直接改变数组
function prepend(arr, item) {
var arr2=arr.slice(0);
arr2.unshift(item);
return arr2;
}
var arr=[1,2,3,4,5,6];
console.log(prepend(arr,0));
23.向数组指定位置添加元素,不直接改变数组
function insert(arr, item,index) {
var arr2=arr.slice(0);
arr2.splice(index,0,item);
return arr2;
}
var arr=[1,2,3,4];
console.log(insert(arr,5,2));
24.统计数组中的值等于item元素 出现的次数
function count(arr, item) {
var count=0;
for(var i=0;i<arr.length;i++){
if(arr[i]==item){
count++;
}
}
return count;
}
var arr=[1, 2, 4, 4,3, 4, 3];
console.log(count(arr,4));
js 面试题之---数组、字符串操作相关推荐
- 微信小程序开发——JS中字符和数组的操作
字符的操作 var word = "hello world" length字符串长度 let len = word.length trim去掉空格 word.trim() inde ...
- java面试题十 string字符串操作
- Javascript——进阶(事件、数组操作、字符串操作、定时器)
目录 事件属性 数组 字符串操作 定时器 变量的作用域 封闭函数 弹框接收数据 事件属性 参数 描述 onclick 鼠标点击事件 onmouseover 鼠标移入标签,触发行为 onmouseout ...
- javascript常见方法汇总之一——数组字符串相关
(转载至慕课网) 原文链接:https://www.imooc.com/article/46933 github地址:https://github.com/dorseysen/notes-about- ...
- js对象、数组、字符串操作总结(保姆级教程)
对象操作 1. 扩展运算符 作用是遍历某个对象或者数组 testMethod() {// 三个点 ... 俗称扩展运算符或延展运算符,需要注意的是扩展运算符在拷贝的时候只能深拷贝第一层,第二层及以下都 ...
- js map 排序_数组方法写给女友的一系列 JS 数组操作(建议收藏 | 内附思维导图)...
前言 最近和女友,咳咳...(说出来可能会被打s)学习JS数组方法,用几个字形容的话就是听说过,实际使用.遇到的时候就分不清具体方法会得到怎样的结果. 今天我将通过这篇文章好好整理一下关于JS数组的方 ...
- js函数语法:ASCII 码的相互转换,字符串操作,数学计算
ASCII 码的相互转换 for (let i = 'a'.charCodeAt(); i <= 'z'.charCodeAt(); i++) {a.push(String.fromCharCo ...
- js中对arry数组的各种操作小结
最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊,为了在以后的工作中写出最优化的代码,我 ...
- js 包含某个字符串_[译] 5 大 JavaScript 字符串操作库
原文地址:5 String Manipulation Libraries for JavaScript 原文作者:Mahdhi Rezvi 译文出自:掘金翻译计划 本文永久链接:https://git ...
最新文章
- 全浏览器兼容的DIV拖动效果
- python快速编程入门第13章-Python快速编程入门,打牢基础必须知道的11个知识点...
- NET 2.0中WinForm自定义的程序配置存放到哪里去了
- 程序员面试金典 - 面试题 10.11. 峰与谷(排序/不排序)
- torch.nn.Module()
- python读取文件数据堆栈溢出的原因_堆栈溢出一般是什么原因?
- Django_ajax
- linux常用命令速查手册PDF下载
- 点云质量评估_点云配准中常用的评价指标
- html 播放wav,js播放wav文件(源码)
- 方形16QAM的C语言仿真
- Python修改证件照底色,get新技能
- 拼多多狂砸百亿补贴的iphone是真的吗?
- 斯坦福大学公开课IOS 7 学习笔记(2)
- hdfs写流程和MR缓冲区
- Placement Rules 使用文档
- BUUCTF misc 九连环隐写
- 纳米数据,足球比分,赛事数据接口api,足球数据接口
- 辗转相除法求最大公约数原理分析(附代码实现)
- Dropbox VS 华为网盘