問答題:
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```
#代碼題:
##使用數組拼接出如下字符串:

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函數,實現下面的功能

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函數,有如下功能

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形式的字符串,如

function camelize(str){
var arr = str.split('-');
return arr.join('');
}
##如下代碼輸出什么?為什么?

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

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時保留該元素,否則刪除該元素)。實現如下功能:

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長,并加上...,如

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;
}```