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 面試題之---陣列、字串操作
1. 計算字串中某個字元的個數 var aaa='1231011211009181'; function count(str){ var arr=[]; for(var i=0;i<str.leng
PHP面試題之文件目錄操作
als brush 文件名 func ram class png 後綴 extension 獲取文件後綴,遍歷目錄層次 /** * 5種方式獲取文件後綴名 * 這道題其實就是考函數substr() strrchr() array_pop() strrpos() str
js面試題之求數組最值
pre 面試 可能 cti clas return n) ole arr 今天繼續分享js常見的面試題,求數組最大值,最小值,這裏列舉4種常見解法,還有其他方法也可以實現,讀者知道可以私信我,我將把意見列舉到博客中,歡迎提出意見。 第一種,利用數組排序 1 var arr
java面試題之final、finalize和finally的區別
finally:finally是一個關鍵字,與try和catch一起用於異常的處理,finally塊一定會執行,無論在try快中是否有發生異常。 finalize:finalize方法是在物件被回收之前呼叫的方法,給物件自己最後一個復活的機會,但是什麼時候呼叫finalize沒有保證。
面試題之js陣列遍歷
js中的陣列遍歷是專案中經常用到的,在這裡將幾種方法做個對比。 for迴圈:使用評率最高,也是最基本的一種遍歷方式。 let arr = ['a','b','c','d','e']; for (let i = 0, len = arr.length; i < len;
js面試題-----DOM操作和BOM操作
dom 數據 prop 樹形 結構 獲取 protocol earch 部分 題目1:DOM是哪種基本的數據結構 答案:DOM是一種樹形結構的數據結構 題目2:DOM操作的常用API有哪些 答案:獲取DOM節點,以及節點的property和Attribute。獲取父節點,獲
前端常見演算法面試題之 - 二維陣列中的查詢[JavaScript解法]
前端常見演算法面試題之 - 二維陣列中的查詢[JavaScript解法] 題目描述 輸入輸出分析 實現思路 程式碼實現 題目描述 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個
java面試題之什麼是死鎖、活鎖、餓死和競態條件?
死鎖:是指兩個或兩個以上的程序(或執行緒)在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,他們將無法推進下去; 活鎖:是指兩個執行緒優先順序相同,都禮讓不走,就這樣一直僵持下去; 餓死:在單執行緒情況下,A、B兩個執行緒,A先執行;A在執行過程中
用9種辦法解決 JS 閉包經典面試題之 for 迴圈取 i
閉包 正確的說,應該是指一個閉包域,每當聲明瞭一個函式,它就產生了一個閉包域(可以解釋為每個函式都有自己的函式棧),每個閉包域(Function 物件)都有一個 function scope(不是屬性),function scope內預設有個名為 Globe 的全域性引用(有了這個引用,就可以直接
Javascript——進階(事件、陣列操作、字串操作、定時器)
目錄事件屬性陣列字串操作定時器封閉函式 事件屬性 引數 描述 onclick 滑鼠點選事件 onmouseover 滑鼠移入標籤,觸發行為 onmouseout 滑鼠移出標籤,觸發行為 陣列 操作 方法 建立 arr
java之字元陣列 、字串、整形之間的轉換。
轉自https://www.cnblogs.com/javacatalina/p/6641338.html 一、字元陣列轉字串 方法1 char[] str = {'a','b','d'}; StringBuffer sb = new StringBugger
JS 進階(9) ECMAScript6 基礎入門:變數、函式、解構賦值、陣列、字串、面向物件、json、promise
一、ES6是啥 ECMAScript 和 JavaScrip的關係 簡單的說ECMA 是一個標準,任何語言都可以去實現這個標準,但目前為止只有javascript 實現了。所以也就預設認為ECMAScript就是javascript。 ECMAScript
JS陣列、字串常用方法
陣列: 1.push(): 向陣列尾部新增一個或多個元素,並返回新增新元素後的陣列長度。注意,該方法會改變原陣列。 1 var arr = [1,2,3]; 2 console.log(arr); // [1, 2, 3] 3 var b = arr.pu
面試題之旋轉陣列求最小數字問題(Python實現)
旋轉陣列求最小數字 問題描述: 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE
python--面試題之棧思想判斷字串是否有效
給定一個只包含' [ ] ( ) { } '元素的字串是否有效,滿足以下條件: 左括號必須用相同的右括號閉合 左括號必須以正確的順序閉合 示例:: ‘()’輸出True
劍指offer面試題之把陣列排成最小的數
1,問題:輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。 2,想法:
面試題:將一個字串陣列中的字母按照以下規則排列:表中任何單詞的首字母與其前面單詞的尾字母相同! 要求:字串只由小寫字母構成,且每個字串長度在2-100之間
package my_pro1; import java.util.ArrayList; import java.util.Iterator; public class WorkListOrder { public static int canArrangeWords
C++面試題之寫一個在一個字串中尋找一個子串第一個位置的函式
#include <iostream> using namespace std; int search_str(char *strDest ,const char *strSrc, int n ) { int count = 1;
一道Java面試題之實現複製、刪除、剪下檔案(資料夾的實現)的snippet
Java面試題是叫寫出檔案複製、刪除和剪下的,所以昨天晚上就花了大概一個小時寫出這個完整的snippet(當然如果只要思路的話就好辦了)。 這個snippet中的刪除檔案(資料夾)部分有點意思,一般在Windows下目錄過長的話,目錄就刪除不了。而這個程式可以解決這個因
js(2) javascript中物件、陣列、字串合併的方法
一、js中物件合併的方法1)第一種方法var a = { a : '1', b : '2' } var content = { c: '3', ...a } console.log(content) //content = {c: "3", a: "1", b: "