1. 統計一個字串中出現最多的字元。
var str = 'wangxiaoaiwangxiaoting';
var o = {};
for(var i = 0; i < str.length; i++) {
var char = str.charAt(i);
// console.log(char);
if(o[char]){ //obj.name 和 obj['name']
o[char]++ //如果物件有這個屬性了,就給這個屬性自增1
}else{
o[char] = 1 //如果物件沒這個屬性,就個這個屬性值設為1
}
}
console.log(o);
var num = 0;
var number = '';
for (var i in o) { //for in迴圈 遍歷物件的屬性和方法
if(num < o[i]){
num = o[i];
number = i
}
}
console.log('最多出現的字元是:'+number+','+'次數是'+num)
2. 陣列去重的幾種方法
var arr = [1,1,2,2,7,5,7,5,4,3,3,4,'a','c','a','b','c','b']
//方法一:利用物件屬性的存在的特性,如果沒有該屬性則存入陣列
function unique1(arr) {
var res = [];
var obj = {};
for(var i = 0; i<arr.length; i++){
if(!obj[arr[i]]){ //obj[arr[i]]為obj物件的屬性值
obj[arr[i]] = 1;
res.push(arr[i])
}
}
return res;
}
console.log(unique1(arr));
//方法二:利用陣列的indexOf
function unqiue2(arr) {
var res = [];
for(var i = 0; i<arr.length; i++){
if(res.indexOf(arr[i])==-1){ //或 arr.indexOf(arr[i])==i,即arr[i]第一次出現就push進res,再次出現就不符合條件,不再push。
res.push(arr[i])
}
}
return res;
}
console.log(unqiue2(arr));
//方法三:陣列原型物件上的的includes方法
function unique3(arr) {
var res = [];
for(var i = 0 ;i < arr.length; i++){
if(!res.includes(arr[i])){
res.push(arr[i])
}
}
return res;
}
console.log(unique3(arr));
//方法四:排序後相鄰去重 思路:原陣列排序,排序後相同值相鄰,然後遍歷時新陣列只傳入不與前一個值相同的值
function unique4(arr) {
arr.sort(); //排序後arr已經改變了
var res = [arr[0]];
for(var i = 1; i<arr.length; i++){
if(arr[i] !== res[res.length-1]){
res.push(arr[i])
}
}
return res;
}
console.log(unique4(arr));
//方法五:優化遍歷陣列
function unique5(arr) {
var res = [];
for(var i = 0; i < arr.length; i++){
for(var j = i+1; j < arr.length; j++){
if(arr[i] == arr[j]){
++ i; //與右邊的元素依次比較,若有重複,則跳出內層迴圈,重新開始。
}
}
res.push(arr[i])
}
return res;
}
console.log(unique5(arr))
//方法六:ES6 Set資料結構類似於陣列,其成員都是唯一的 IE系列不相容
function unique6(arr) {
// return Array.from(new Set(arr)) ;//Array.from 將Set結構轉換成陣列
return [...(new Set(arr))]
}
console.log(unique6(arr))
//方法七:ES6
function unique7(arr) {
const res = new Map();
return arr.filter((a)=>!res.has(a)&&res.set(a,1))
}
console.log(unique7(arr));
3. 陣列clone(深、淺拷貝)
var arr1 = arr.concat();//方法1 concat(),深拷貝
var arr2 = arr.slice(0);//方法2 slice(),深拷貝
var arr3 = []; //方法3 for迴圈,淺拷貝
for(var i in arr){
arr3[i] = arr[i]
}
/**
* 深拷貝 ,如果陣列裡含有物件
*/
function deepClone(arr) {
var res = [];
for (var i in arr){
if (typeof arr[i] === 'object') { //如果含有物件,則遞迴
res[i] = deepClone(arr[i])
}else{
res[i] = arr[i]
}
}
return res
}
4. 找出陣列中的最大值
var arrMax = [1,2,3,4,5];
//1.for迴圈,古老的寫法,遍歷之後取最大值
var arrRes = arrMax[0];
for(var i = 1 ;i <arrMax.length; i++){
var result = Math.max(arrRes,arrMax[i])
}
console.log(result)
//2.Math最大值。用到apply方法,可以將陣列轉換成引數列表再呼叫Math方法
Math.max.apply(null,arrMax)
//3.sort()
arrMax.sort((num1,num2) => {return num2-num1})[0] //或者sort()後reverse()
//4.reduce()
arrMax.reduce((num1,num2) => {return num1 > num2 ? num1 : num2})
5. 陣列降維
var arrDown = [[1,2,3],[4,5],[9,8,7]];
//1.二維陣列,雙層遍歷
function down(arr) {
var resDown = [];
for(var i = 0;i < arr.length; i++){
for (var j = 0; j < arr[i].length; j++){
resDown.push(arr[i][j])
}
}
return resDown
}
console.log(down(arrDown))
//2.concat()
function down2(arr) {
var resDown = [];
for(var i = 0; i < arr.length; i++){
resDown = resDown.concat(arr[i])
}
return resDown
}
console.log(down2(arrDown))
//3.concat()和apply()結合
function down3(arr) {
var resDown = [];
return Array.prototype.concat.apply(resDown,arr)
}
console.log(down3(arrDown))
6. 陣列排序
//1.氣泡排序
var arrs = [3,2,5,9,1,6,33,4,65,22];
var temp = 0;
for(var i = 0; i < arrs.length; i++){
for(var j = i+1; j < arrs.length;j++){
if(arrs[i] > arrs[j]){ //相鄰比較,如果前一個大,就調換位置
temp = arrs[i];//temp儲存前一個大的數
arrs[i] = arrs[j];//前一個換成小的那個數
arrs[j] = temp//將大的賦值給後一個
}
}
}
console.log(arrs)
//2.快速排序
function quickSort(arr) {
if(arr.length <= 1) return arr;
var middleIndex = Math.floor(arr.length/2);//取中間值
var middle = arr.splice(middleIndex,1);//刪除並返回這個值,即把中間這個值拿出來用作比較
var left = [];
var right = [];
for(var i = 0; i < arr.length; i ++){
if(arr[i] > middle){ //遍歷,比這個大的放在right陣列,小的放在left陣列
right.push(arr[i])
}else{
left.push(arr[i])
}
}
return quickSort(left).concat(middle,quickSort(right));//遞迴 直到length<=1
}
console.log(quickSort(arrs));
//3.選擇排序
function selectSort(arr) {
var minIndex, temp;
for(var i = 0; i < arr.length-1; i++){
minIndex = i;
for(var j = i+1; j<arr.length; j++){
if(arr[j] < arr[minIndex]){
minIndex = j
}
}
temp = arr[i];
arr[i] =arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
console.log(selectSort(arrs))