任務18-數組、字符串、數學函數

問答題:

1.數組方法里push、pop、shift、unshift、join、split分別是什么作用。

push:在數組最后推入新的參數。
pop:在數組最后刪除參數。
shift:刪除數組最前面的參數。
unshift:在數組最前面添加新的參數。
join:用參數將數組鏈接生成一個新的字符串,不會改變原數組。
split:把字符串分割成以參數為分割界限的數組。

2.用 splice 實現 push、pop、shift、unshift方法

var arr =[1,2,3,4];
arr.splice(arr.length-1,1);//pop
arr.splice(arr.length,1,4);//push
arr.splice(0,1);//shift
arr.splice(0,0,1);//unshift```
#代碼題:
##使用數組拼接出如下字符串:

![](http://upload-images.jianshu.io/upload_images/2399926-337e34f1e84bd6e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

##寫一個find函數,實現下面的功能 

![](http://upload-images.jianshu.io/upload_images/2399926-258110b262d41bee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

var arr = [ "test", 2, 1.5, false ];
function find(arr,idx){
for(var i=0;i<arr.length;i++){
if(idx === arr[i]){
return i;
}
return -1;
}
}```

寫一個函數filterNumeric,把數組 arr 中的數字過濾出來賦值給新數組newarr, 原數組arr不變

arr = ["a", "b", 1, 3, 5, "b", 2];
function filterNumeric(arr){
     var arrNumber = [];
   for(var i=0;i<arr.length;i++){
     if(typeof arr[i] === 'number'){
       arrNumber.push(arr[i]);
     }
   }
   return arrNumber;
}```
##對象obj有個className屬性,里面的值為的是空格分割的字符串(和html元素的class特性類似),寫addClass、removeClass函數,有如下功能

![](http://upload-images.jianshu.io/upload_images/2399926-b9b007fde5f01210.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

var obj = {
className: 'open menu'
};
function addClass(obj,idx){
var arr = obj.className.split(' ');//將字符串切割為數組
for(var i=0;i<arr.length;i++){//遍歷obj
if(arr[i] === idx){//當新參數與原數組相同時
return;//跳出
}
}
arr.push(idx);
obj.className = arr.join(' ');//將新數組合并為字符串
return obj;
}```

function removeClass(obj,idx){
  var arr = obj.className.split(' ');
  for(var i=0;i<arr.length;i++){
    if(arr[i] === idx){
    arr.splice([i],1);//此處注意不能return,否則function立即跳出
    }
  }
  obj.className = arr.join(' ');
  return obj;
}```
##寫一個camelize函數,把my-short-string形式的字符串轉化成myShortString形式的字符串,如

![](http://upload-images.jianshu.io/upload_images/2399926-bf933737473f728e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

function camelize(str){
var arr = str.split('-');
return arr.join('');
}

##如下代碼輸出什么?為什么?

![](http://upload-images.jianshu.io/upload_images/2399926-9b9fe4a1bae49bea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

arr.push給arr推入了一個新參數,返回值為3,即此時數組arr共有三個參數。
``arr[arr.length-1]()``調用了此匿名函數的第三項,執行``alert(console.log('hello hunger valley'));``
··console.log('hello hunger valley')··其返回類型是undefined,所以最終輸出undefined
##寫一個函數filterNumericInPlace,過濾數組中的數字,刪除非數字。要求在原數組上操作

![](http://upload-images.jianshu.io/upload_images/2399926-27af198c0c1923ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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--;//一旦數組向前移動,使i減一位,與新數組的位置對應
}
}
}```

寫一個ageSort函數實現數組中對象按age從小到大排序

function ageSort(people){
  people.sort(function(a,b){
    return a.age>b.age;
  });
  return people;
}```
##寫一個filter(arr, func)函數用于過濾數組,接受兩個參數,第一個是要處理的數組,第二個參數是回調函數(回調函數遍歷接受每一個數組元素,當函數返回true時保留該元素,否則刪除該元素)。實現如下功能:

![](http://upload-images.jianshu.io/upload_images/2399926-d5a9c3013b014d6c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

function isNumeric (el){
return typeof el === 'number';
}
arr = ["a",3,4,true, -1, 2, "b"]
function filter(arr,func){
for( var i=0; i<arr.length; i++){
if(!func(arr[i])){
arr.splice(i,1);
}
}
return arr;
}```

字符串

寫一個 ucFirst函數,返回第一個字母為大寫的字符

function ucFirst(arr){
  return arr[0].toUpperCase()+arr.substr(1,arr.length-1);
}```
##寫一個函數truncate(str, maxlength), 如果str的長度大于maxlength,會把str截斷到maxlength長,并加上...,如 

![](http://upload-images.jianshu.io/upload_images/2399926-a99e7771f5725633.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

function truncate(str, maxlength){
var arr = str.split('');
for (var i=0;i<arr.length;i++){
if(arr.length > maxlength){
arr.splice(maxlength,arr.length);
return arr.join('')+ '...';
}
return arr.join('');
}
}```

數學函數

寫一個函數,獲取從min到max之間的隨機整數,包括min不包括max

function getRandStr(min,max){
  return min + Math.floor(Math.random()*(max-min));
}```
##寫一個函數,獲取從min都max之間的隨機整數,包括min包括max 

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

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

function getRandStr(len,min,max){
  var arr =[];
  for(var i=0; i<len;i++){
    arr.push(Math.floor(Math.random()*(max-min+1))+min);
  }
  return arr;
}

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

function getRandStr(n){
  var val='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  var arr='';
  for(var i=0;i<n;i++){
    arr += val[Math.floor(Math.random()*val.length)];
  }
  return arr;
}```

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

推薦閱讀更多精彩內容