任務(wù)18-數(shù)組、字符串、數(shù)學(xué)函數(shù)

問答題

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

** pop和push ** 以堆棧先入后出的方式操作數(shù)組,push返回值為數(shù)組長度,pop返回值為刪除元素。


pop和push

pop和push返回值

** shift、unshift ** 以先入先出隊列的的方式操作數(shù)組,從數(shù)組的頭部元素開始操作。unshift用于向數(shù)組頭部添加一個元素,返回值是數(shù)組長度。shift返回值是刪除元素。


shift和unshift

shift和unshift返回值

** splice ** 方法用新元素替換舊元素,以此修改數(shù)組的內(nèi)容。

array.splice(start, deleteCount, item1, item2, ...)
返回值:被刪除數(shù)組,如果未刪除元素,則返回空數(shù)組。


splice

** join ** 作用是把數(shù)組元素(對象調(diào)用其toString()方法)使用參數(shù)作為連接符連接成一字符串,不會修改原數(shù)組內(nèi)容。


join

** split ** 將字符串分割為字符串?dāng)?shù)組,并返回此數(shù)組。

string.split(separator, limit);
separator -- 分隔符。separator 可以是一個字符串或[正則表達(dá)式]。如果忽略 separator,則返回整個字符串的數(shù)組形式。如果 separator是一個空字符串,則 str 將會把原字符串中每個字符的數(shù)組形式返回。
limit -- 可選參數(shù),限定返回的分割片段數(shù)量。如果無此參數(shù)為不限制次數(shù)。


string.split

代碼題

1、用 splice 實現(xiàn) push、pop、shift、unshift方法。


splice用法

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


join字符串

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

var arr = [ "test", 2, 1.5, false ]
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1

find函數(shù)

function find(arr,val){
     for(var i = 0;i<arr.length;i++){
       if(arr[i] === val ){
        return i;
         }
     else return -1;
   }
}
find函數(shù)

4、寫一個函數(shù)filterNumeric,實現(xiàn)如下功能 。

arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr); // [1,3,5,2]

函數(shù)filterNumeric

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

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

var obj = { 
className: 'open menu'
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open') // 因為open已經(jīng)存在,此操作無任何辦法
addClass(obj, 'me') // obj.className='open menu new me'
console.log(obj.className) // "open menu new me"
removeClass(obj, 'open') // obj.className='menu new me'
removeClass(obj, 'blabla') // 不變

函數(shù)addClass

var obj = { 
className: 'open menu'
};
function addClass(obj,str){
  var arr = obj.className.split(' ');
  for(var i = 0;i<arr.length;i++){
    if(arr[i] === str){
       console.log(arr[i]+'已存在,無法再次增加此屬性');
       break ;
       }
  }
  if(arr[i] !== str){
     arr.push(str);
  }     
     obj.className = arr.join(' ');
     return obj.className;
}
function addClass

函數(shù)removeClass

function removeClass(obj,str){
  var arr = obj.className.split(' ');
  for(var i = 0;i<arr.length;i++){
    if(arr[i] === str){
      arr.splice(i,1);
      break;
    }
  if(arr[i] !== str){
     arr.join('');
  }
 }
  obj.className= arr.join(' ');
  return obj.className;
}
removeClass

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

camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'

函數(shù)camelize

function camelize(str){
  var arr = str.split('-');
  for(var i = 1;i<arr.length;i++){
    var str2 = arr[i][0].toUpperCase();
    var str3 = arr[i].slice(1);
    arr[i] = str2+str3;
  }
  return arr.join('');
}
驗證函數(shù)camelize

6、如下代碼輸出什么?為什么?

arr = ["a", "b"];  // 有兩個字符串組成的數(shù)組
arr.push( function() { alert(console.log('hello hunger valley')) } );
//把函數(shù)以棧的形式推進(jìn)arr數(shù)組,返回值為數(shù)組長度3
arr[arr.length-1]() // ?
//此時arr[2]為函數(shù),后面(),則立即執(zhí)行此函數(shù)。函數(shù)運行, 控制臺打印hello hunger valley,因為沒有返回值,alert就會認(rèn)為是undefined 。

7、寫一個函數(shù)filterNumericInPlace,過濾數(shù)組中的數(shù)字,刪除非數(shù)字。

arr = ["a", "b", 1, 3, 4, 5, "b", 2];
//對原數(shù)組進(jìn)行操作,不需要返回值
filterNumericInPlace(arr);
console.log(arr) // [1,3,4,5,2]

函數(shù)filterNumericInPlace

function filterNumericInPlace(arr){
  for(var i = arr.length-1;i>=0;i--){
    if(typeof(arr[i]) !== 'number'){
      arr.splice(i,1);
    }
  }
}
驗證function filterNumericInPlace

7、寫一個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 ]
ageSort(people) // [ bob, mary, john ]

函數(shù)ageSort

function ageSort(people){
  people.sort(function(a,b){return a.age - b.age;});
  return people;
}
函數(shù)ageSort.png

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

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ù)filter(arr, func)

function filter(arr, func){
  for(var i = 0;i<arr.length;i++){
    if(!func(arr[i])){
      arr.splice(i,1);
      i--;
    }
  }
   return arr;
}
函數(shù)filter(arr, func)

字符串

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

 function ucFirst(str){
   var arr = str.split('');
   arr[0] = str[0].toUpperCase();
   str = arr.join('');
   return str;
 }  
function ucFirst(str)

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

truncate("hello, this is hunger valley,", 10)) == "hello, thi...";
truncate("hello world", 20)) == "hello world"

函數(shù)truncate(str, maxlength)

function truncate(str, maxlength){
  if(str.length>maxlength){
    str = str.slice(0,str.length-1)+'...';
  }
  return str;
}
函數(shù)truncate(str, maxlength)

數(shù)學(xué)函數(shù)

1、寫一個函數(shù),獲取從min到max之間的隨機(jī)數(shù),包括min不包括max。

function randM(min,max){
  var data = Math.random()*(max-min)+min;
  return data;
}

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

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

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

function getRandomArr(len,min,max){
  var arr = [];
 for(var i = 0;i<len;i++){
   arr.push(Math.random(max-min+1)+min);
}
  return arr;
}
隨機(jī)數(shù)組

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

function getRandStr(len){ 
  var str = '',
        temp,
        dic ='0123456789abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
 for(var i = 0;i<len;i++){
     temp = Math.floor(Math.random()*dic.length);
     str += dic[temp];
  }
     return str;
}
getRandStr(len)

** 本教程版權(quán)歸博主和饑人谷所有,轉(zhuǎn)載須說明來源。**

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容