問答題
數(shù)組方法里push、pop、shift、unshift、join、splice分別是什么作用。
** pop和push ** 以堆棧先入后出的方式操作數(shù)組,push返回值為數(shù)組長度,pop返回值為刪除元素。
** shift、unshift ** 以先入先出隊列的的方式操作數(shù)組,從數(shù)組的頭部元素開始操作。unshift用于向數(shù)組頭部添加一個元素,返回值是數(shù)組長度。shift返回值是刪除元素。
** splice ** 方法用新元素替換舊元素,以此修改數(shù)組的內(nèi)容。
array.splice(start, deleteCount, item1, item2, ...)
返回值:被刪除數(shù)組,如果未刪除元素,則返回空數(shù)組。
splice
** join ** 作用是把數(shù)組元素(對象調(diào)用其toString()方法)使用參數(shù)作為連接符連接成一字符串,不會修改原數(shù)組內(nèi)容。
** 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方法。
2、使用數(shù)組拼接出如下字符串。
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;
}
}
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;
}
函數(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;
}
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('');
}
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);
}
}
}
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;
}
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;
}
字符串
1、寫一個 ucFirst函數(shù),返回第一個字母為大寫的字符。
function ucFirst(str){
var arr = str.split('');
arr[0] = str[0].toUpperCase();
str = arr.join('');
return 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ù)學(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;
}
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;
}
** 本教程版權(quán)歸博主和饑人谷所有,轉(zhuǎn)載須說明來源。**