一、數(shù)組方法里push、pop、shift、unshift、join、split分別是什么作用。(*)
- 概念
push()
方法添加一個或多個元素到數(shù)組的末尾,并返回數(shù)組新的長度(length 屬性值)。
**pop()
** 方法刪除一個數(shù)組中的最后的一個元素,并且返回這個元素。
shift()
方法刪除數(shù)組的 第一個 元素,并返回這個元素。該方法會改變數(shù)組的長度。
**unshift()
** 方法在數(shù)組的開頭添加一個或者多個元素,并返回數(shù)組新的 length 值。
join()
方法將數(shù)組中的所有元素連接成一個字符串。
split()
方法用于把一個字符串分割成字符串數(shù)組。 - 用法
- push、pop: 在數(shù)組最后添加,刪除數(shù)組最后一位;會改變原數(shù)組;

- shift、unshift: 跟push、pop相反,是在數(shù)組最前面進行添加刪除操作,改變原數(shù)組;

- concat: 拼接數(shù)組的用途,不改變原數(shù)組,生成新數(shù)組;

- join: 給數(shù)組之間增加連接符,不會改變原數(shù)組;

- splice:刪除、替換、插入;會操作原數(shù)組

- slice:不操作原數(shù)組,生成新數(shù)組,區(qū)分splice

- reverse:就是反序

- sort: 排序和自定義排序

二、
- 用 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);

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);
