javascript數(shù)組、字符串、數(shù)學函數(shù)

一、數(shù)組方法里push、pop、shift、unshift、join、split分別是什么作用。(*)

  1. 概念
    push()
    方法添加一個或多個元素到數(shù)組的末尾,并返回數(shù)組新的長度(length 屬性值)。
    **pop()
    ** 方法刪除一個數(shù)組中的最后的一個元素,并且返回這個元素。
    shift()
    方法刪除數(shù)組的 第一個 元素,并返回這個元素。該方法會改變數(shù)組的長度。
    **unshift()
    ** 方法在數(shù)組的開頭添加一個或者多個元素,并返回數(shù)組新的 length 值。
    join()
    方法將數(shù)組中的所有元素連接成一個字符串。
    split()
    方法用于把一個字符串分割成字符串數(shù)組。
  2. 用法
  • push、pop: 在數(shù)組最后添加,刪除數(shù)組最后一位;會改變原數(shù)組;
push、pop的用法
  • shift、unshift: 跟push、pop相反,是在數(shù)組最前面進行添加刪除操作,改變原數(shù)組;
shift、unshift的用法
  • concat: 拼接數(shù)組的用途,不改變原數(shù)組,生成新數(shù)組;
concat的用法
  • join: 給數(shù)組之間增加連接符,不會改變原數(shù)組;
join的用法
  • splice:刪除、替換、插入;會操作原數(shù)組
splice的用法
  • slice:不操作原數(shù)組,生成新數(shù)組,區(qū)分splice
slice的用法
  • reverse:就是反序
reverse的用法
  • sort: 排序和自定義排序
sort的用法

二、

  1. 用 splice 實現(xiàn) push、pop、shift、unshift方法 (***)
var a = new Array(4,7,3,9,5);

//push用法
a.push(8);
console.log(a);

//splice當作pop用法
a.splice(5);
console.log(a);

//splice當作push用法
a.splice(5,0,8);
console.log(a);

//pop用法
a.pop();
console.log(a);

//unshift用法
a.unshift(8);
console.log(a);

//splice當作shift用法
a.splice(0,1);
console.log(a);

//splice當作unshift用法
a.splice(0,0,8);
console.log(a);

//shift用法
a.shift();
console.log(a);

jsbin

splice

2.使用數(shù)組拼接出如下字符串 (***)

var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
    };
    function getTpl(data){
       var arr=[];
      arr.push("<dl class='product'><dt>"+data.name+"</dt>");
      for(i=0;i < data.styles.length; i++){
       arr.push("<dd>"+data.styles[i]+"</dd>");
      }
      arr.push("</dl>");
      console.log(arr.join(''));

    }
var result = getTpl(prod);
測試

3.寫一個find函數(shù),實現(xiàn)下面的功能 (***)

var arr = [ "test", 2, 1.5, false ];

function find(a,e){
  
  console.log(arr.indexOf(e));
  return arr.indexOf(e);
}
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1
測試

4.寫一個函數(shù)filterNumeric,把數(shù)組 arr 中的數(shù)字過濾出來賦值給新數(shù)組newarr, 原數(shù)組arr不變 (****)

//第一種方法直接用.filter(e)
/*arr = ["a", "b", 1, 3, 5, "b", 2];

 function filterNumeric(a){
  
 var b = a.filter(function(e){
  return typeof e==="number"
  })
 return b;
}


newarr = filterNumeric(arr);  //   [1,3,5,2]
*/
//第二種方法用for&if
arr = ["a", "b", 1, 3, 5, "b", 2];

var filterNumeric = function(a){
  var arr = [];
  for(var i=0; i<a.length; i++){
    if(typeof a[i]=="number"){
      arr.push(a[i]);
    }
  }
  console.log(arr);
  return arr;
};

newarr = filterNumeric(arr); 
測試

5.對象obj有個className屬性,里面的值為的是空格分割的字符串(和html元素的class特性類似),寫addClass、removeClass函數(shù),有如下功能:(****)
jsbin


var obj = {
  className: 'open menu'
};

 function addClass(obj,e){
   var strs = obj.className.split(" ");//字符串先組裝成數(shù)組
  for(var i = 0; i<strs.length; i++){//這樣就可以逐個進行條件確認
     if(e===strs[i]){
       return ;
     }   
  }
  console.log(e);//說明"new""me"符合條件
   obj.className += " " + e;
}

addClass(obj, 'new'); 
addClass(obj, 'open'); 
addClass(obj, 'me'); 
console.log(obj.className);  // "open menu new me"


function removeClass(o,e){
  var strs2 = obj.className.split(" ");
  for(var i=0; i<strs2.length; i++){
    if(e === strs2[i]){
      strs2.splice(i,1);
      i--;
    }
  }
  obj.className = strs2.join(" ");//
  console.log(obj.className);
}

removeClass(obj, 'open'); // 去掉obj.className里面的 open,變成'menu new me'
removeClass(obj, 'blabla');  // 因為blabla不存在,所以此操作無任何影響

測試

6.寫一個camelize函數(shù),把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串,如 (***)

function camelize(string){
  var strs = string.split("-");
  for(var i=1; i<strs.length; i++){
    strs[i] = strs[i].slice(0,1).toUpperCase() + strs[i].slice(1)
  }//留下一個大寫字母再加回后面的
  return strs.join("");
}
camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'

測試

jsbin

7.如下代碼輸出什么?為什么? (***)

arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );
arr[arr.length-1]()
//相當于
arr[2]() 
//相當于
function() { alert(console.log('hello hunger valley')) }()
//后面加了括號就是調(diào)用函數(shù),因為調(diào)用了肯定會執(zhí)行里面的alert和console.log,所以執(zhí)行結(jié)果是"hello hunger valley" 和 undefined .

8.寫一個函數(shù)filterNumericInPlace,過濾數(shù)組中的數(shù)字,刪除非數(shù)字。要求在原數(shù)組上操作 (****)

arr = ["a", "b", 1, 3, 4, 5, "b", 2];

function filterNumericInPlace(arr){
  for(var i=0; i<arr.length; i++){
    if(typeof arr[i] != "number" ){
      arr.splice(i--,1);//i--是因為當符合條件需要刪除元素的時候,同時會改變length,就是splice會改變i的指針,當刪減一個時,我們要讓他保持原位置;
    }
  }
}
filterNumericInPlace(arr);
console.log(arr)  // [1,3,4,5,2]
測試

9.寫一個ageSort函數(shù)實現(xiàn)數(shù)組中對象按age從小到大排序 (***)

var john = { name: "John Smith", age: 23 };
var mary = { name: "Mary Key", age: 18 };
var bob = { name: "Bob-small", age: 6 };


var people = [ john, mary, bob ];

function ageSort(arr){
  arr.sort(function(a,b){
    if(a.age > b.age){
      return true;
    }
    else{
      return false;
    }
  });
}
ageSort(people); // [ bob, mary, john ]

console.log(people)
測試

10.寫一個filter(arr, func)函數(shù)用于過濾數(shù)組,接受兩個參數(shù),第一個是要處理的數(shù)組,第二個參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個數(shù)組元素,當函數(shù)返回true時保留該元素,否則刪除該元素)。實現(xiàn)如下功能: (****)

//第一種方法
/*function filter(arr,func){
  for(var i=0; i<arr.length; i++){
    if(!func(arr[i])){
      arr.splice(i--,1);
    }
  }
  console.log(arr);
  return arr;
}*/
//第二種方法
function filter(arr,func){
  var newarr = [];
  for(var i=0; i<arr.length; i++){
    if(func(arr[i])){
      newarr.push(arr[i]);
    }
  }
  console.log(newarr);
  return newarr;

}

function isNumeric (el){
    return typeof el === 'number'; 
}


arr = ["a",3,4,true, -1, 2, "b"];

arr = filter(arr, isNumeric) ; 
// arr = [3,4,-1, 2],  過濾出數(shù)字

arr = filter(arr, function(val) { return  typeof val === "number" && val > 0; });  
// arr = [3,4,2] 過濾出大于0的整數(shù)

//正向思維就是生成空數(shù)組,把true條件的數(shù)往里面塞push
//逆向思維就是通過取反,將false的往里面取出來splice值

測試

三、字符串

1.寫一個 ucFirst函數(shù),返回第一個字母為大寫的字符 (***)

function ucFirst(txt){
  
   var b = txt.replace(txt[0],txt.slice(0,1).toUpperCase());
  console.log(b); 
  return b
   
}
ucFirst("hunger");

測試

2.寫一個函數(shù)truncate(str, maxlength), 如果str的長度大于maxlength,會把str截斷到maxlength長,并加上...,如 (****)

function truncate(str,maxlength){
  if(str.length > maxlength){
    var b = str.slice(0,maxlength) + "...";
    return b;
  }else{
    return str;
  }
}

truncate("hello, this is hunger valley,", 10);

truncate("hello world", 20);

測試

四、數(shù)學函數(shù)

1.寫一個函數(shù),獲取從min到max之間的隨機整數(shù),包括min不包括max (***)

function random(min,max){
  return min  + Math.floor(Math.random()*(max-min))
}                         
random(10,20);           

//在這里面值的范圍相當于[10,20),因為用的是floor,取得是參數(shù)的最小整數(shù),所以不可能取到20
測試

2.寫一個函數(shù),獲取從min都max之間的隨機整數(shù),包括min包括max (***)

function random(min,max){
  return min  + Math.round(Math.random()*(max-min))
}                         
random(10,20);           

//在這里面值的范圍相當于[10,20),因為用的是round方法,取得是參數(shù)四舍五入可以是最大值20也可以是最小值10
測試

3.寫一個函數(shù),獲取一個隨機數(shù)組,數(shù)組中元素為長度為len,最小值為min,最大值為max(包括)的隨機整數(shù) (***)

function ran(len,min,max){
        var arr = [], what;
        for(var i=0; i<len; i++){
            what = min + Math.round(Math.random()*(max-min));
            arr.push(what)
        }
        return arr;
    } 
測試

4.寫一個函數(shù),生成一個長度為 n 的隨機字符串,字符串字符的取值范圍包括0到9,a到 z,A到Z。

function getRandStr(len){
        var arr = [], what, fan = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ";
        for(var i=0; i<len; i++){
            what = fan[Math.round(Math.random()*fan.length)];
            arr.push(what);
        }
        return arr.join("");
    }
    var str = getRandStr(10);
測試
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容