问答
数组方法里push、pop、shift、unshift、join、split分别是什么作用?
- push 从字面意义讲有推得意思,然而在JavaScript数组中他的作用是在数组末尾推入push后括号里的内容;而pop从字面意义上讲其有出现、伸出之意,在数组中其与push刚好相反,则是在数组末尾删除pop后括号里的内容。例如:
var a =[2,3,4,5]
a.push(1)
5 //这里显示原数组+新推入的内容之后 数组的长度
a
[2, 3, 4, 5, 1]
a.pop(1)
1 //显示所删除的内容
a
[2, 3, 4, 5]
- shift的英文意思有去掉之意,因此在JavaScript数组中是指去掉(删除)第一项shift()括号里的内容。而unshift正好与此相反,则是在数组中第一项之前加入unshift()括号里的内容。例如:
var b =[2,3,4,5]
b.shift(2)// 删除数组里的2
2
b //检查下删除后的数组b
[3, 4, 5]
b.unshift(0,1,2)//在数组中加入0,1,2
6 //显示数组b加入新内容后的总长度
b
[0, 1, 2, 3, 4, 5]
- join从字面意义上讲就有连接的意思,而在数组中是将数组里的内容拼接成一个字符串,而且不会改变原数组。例如:
var x=[1,2,3,4]
x.join("-")
"1-2-3-4"
x
[1, 2, 3, 4]
x.join('*')
"1*2*3*4"
x
[1, 2, 3, 4]
- split从字面意义上讲是分裂,分开的意思;而在JavaScript中split() 方法用于把一个字符串分割成字符串数组;
而字符串是由单引号或双引号包裹的字符序列,在使用split()后则可转换成数组。但是同样不会改变原有的字符串。
var str="a,b,c,d,e";
str.split();
["a,b,c,d,e"]
str
"a,b,c,d,e"
str.split("*");
["a,b,c,d,e"]
str.split(' ')
["a,b,c,d,e"]
str.split('* *');
["a,b,c,d,e"]
var str2 ="hello,world";
undefined
str2.split();
["hello,world"]
str2
"hello,world"
str2.split('',1)
["h"]
str2
"hello,world"
str2.length //查看下str2的长度
11 显示为11,在此证明""里的所有字符都是有效的。
代码
用 splice 实现 push、pop、shift、unshift方法?
- push是在对象的末尾添加字符,那么他在用splice(a,b,c)表示的时候应该也必须是能在末尾添加,函数如下:
var arr =[2,3,4,5,6];
function push(arr,val){
arr.splice(arr.length,0,val);//其中val代表需要push的值,经过测试该函数一次只能push一个值.
return arr.length;//返回数组的长度}
//欲多push几个值,可以多加几个val.
function push(arr,val,val2,val3){
arr.splice(arr.length,0,val,val2,val3);
return arr.length; //返回数组的长度
}
- pop是在数组的末尾删除字符,而splice中删除的时候末尾一位的索引是length-1,所以函数如下:
function pop(arr){
arr.splice(arr.length-1,1);
return arr.length;
}
*shift是去除数组的第一位,而在splice中删除第一位索引则为0,个数必须等于1,大于1的时候就是截取几位,函数如下:
function shift(arr){
arr.splice(0,1);
return arr.length;
}
- unshift则是指在数组的第一位之前加入字符或者值,因此其函数为:
function unshift(arr,val){
arr.splice(0,0,val);
return arr.length;}
综上函数只适用于添加一个数字,欲添加多个数字或者字符,请设置多个变量val.
使用数组拼接出如下字符串 :
var prod = { name: '女装',
styles: ['短款', '冬季', '春装']};
function getTpl(data){
//todo...};
var result = getTplStr(prod); //result为下面的字符串
<dl class="product">
<dt>女装</dt>
<dd>短款</dd>
<dd>冬季</dd>
<dd>春装</dd>
</dl>
代码如下:
function getTpl(data){
var htmls=[];
htmls.push('<dl class="product">');
htmls.push('<dt>'+data.name+'</dt>');
for(var i=0;i<data.styles.length;i++){
htmls.push('<dd>'+data.styles[i]+'</dd>'); } // 遍历styles里边的每一项;
htmls.push('</dl>');
console.log(htmls.join(''));} //拼接html里的字符
getTpl(prod);//执行函数
写一个find函数,实现下面的功能 (***)
var arr = [ "test", 2, 1.5, false ];
find(arr, "test") // 0
find(arr, 2) //
1find(arr, 0) // -1
函数如下:
var arr = [ "test", 2, 1.5, false ];
function find(arr,val){
var i=0;
i<arr.length;
i++;
if(val ===arr[i]){
console.log(i); }
else{
console.log(-1); }}
写一个函数filterNumeric,把数组 arr 中的数字过滤出来赋值给新数组newarr, 原数组arr不变
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr); // [1,3,5,2]
函数代码如下:
function filterNumeric(arr){
var arr1=arr.slice(2,5);
var arr2=arr.slice(6,7);
console.log(arr1.concat(arr2));};
对象obj有个className属性,里面的值为的是空格分割的字符串(和html元素的class特性类似),写addClass、removeClass函数,有如下功能:
var obj = { className: 'open menu'}
addClass(obj, 'new')
// obj.className='open menu new'
addClass(obj, 'open')
// 因为open已经存在,所以不会再次添加
openaddClass(obj, 'me')
// me不存在,所以 obj.className变为'open menu new me'
console.log(obj.className)
// "open menu new me"
removeClass(obj, 'open')
// 去掉obj.className里面的 open,变成'menu new me'
removeClass(obj, 'blabla')
// 因为blabla不存在,所以此操作无任何影响
函数代码如下:
var obj = {
className: 'open menu' };
function addClass(obj,val){
var arr =obj.className.split( ' '); //将obj.classname转化成数组。
console.log(arr); // 看下转化后的数组
for(var i=0;i<arr.length;i++){
if(val ===arr[i]){ //条件判断下
return; }
else{
arr.push(val); }
}
console.log(arr); //在显示下添加字符后的数组
obj.className=arr.join( ' ') } 将转化后的数组重新赋值给obj.className
//remove函数:
function removeClass(obj,val){
var arr =obj.className.split( ' ');
console.log(arr);
for (var i = 0; i < arr.length; i++) {
if (val === arr[i]) {
arr.splice(i, 1);
} }
obj.className = classArr.join(' '); }
写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串,如:
var str ="list-style-image";
function camelize(str) {
var arr=str.split("-"); //将字符串转化成数组
for(var i=0;i<arr.length;i++){
arr[i]=arr[i].replace(arr[i][0],arr[i][0].toUpperCase()); //首字母替换成大写 }
return arr.join( ''); }
camelize(str);
如下代码输出什么?为什么? (***)
arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );
arr[arr.length-1]() // ?
在上面这段代码中,arr.push说明是向数组arr中末尾推入元素,现在push后的括号内是一个函数,经过分析该函数表达结果就是一个函数因此是向arr数组中推入function函数。如下:
["a", "b", anonymous()]
而arr[arr.length-1]()毫无意义的标识,因此会报错。
写一个函数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--;
}
}
}
filterNumericInPlace(arr);
console.log(arr);
写一个ageSort函数实现数组中对象按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 ]
代码:
function ageSort(arr){
arr.sort(function(a,b){
return a.age-b.age;});}
ageSort(people);
console.log(people);
写一个filter(arr, func)函数用于过滤数组,接受两个参数,第一个是要处理的数组,第二个参数是回调函数(回调函数遍历接受每一个数组元素,当函数返回true时保留该元素,否则删除该元素)。实现如下功能:
function isNumeric (el){ return typeof el === 'number'; }
arr = ["a",3,4,true, -1, 2, "b"]
arr = filter(arr, isNumeric) ; // arr = [3,4,-1, 2],
过滤出数字arr = filter(arr, function(val) { return typeof val === "number" && val > 0 });
// arr = [3,4,2] 过滤出大于0的整数
代码如下:
// 先筛选数组函数如下:
arr = ["a",3,4,true, -1, 2, "b"];
function isNumeric(arr){
for(var i=0;i<arr.length;i++){
if(typeof arr[i] !=="number" ){
arr.splice(i,1); }
}
console.log(arr); }
isNumeric(arr); //筛选出数组里边的数字 显示arr=[3,4,-1,2];
function fitter(arr){
for(var j=0;j<arr.length;j++){
if(arr[j]< 0){
arr.splice(j,1);
} }
console.log(arr);
}
fitter(arr);// 返回数组arr=[3,4,2];
字符串
写一个 ucFirst函数,返回第一个字母为大写的字符:
ucFirst("hunger") == "Hunger"
函数如下:
var str="hello";
function ucFirst(str){
return str[0].toUpperCase()+str.slice(1);}
ucFirst(str);
写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上...
,如 :
代码如下:
var str = "hello world";
function truncate(str,maxLength){
if(str.length <= str.maxLength){
return str; }else{
return str.slice(0,maxLength)+'....'; } }
console.log(truncate("baby,I love you",10));
// 返回baby,I lov....
数学函数
写一个函数,获取从min到max之间的随机整数,包括min不包括max :
function rand1(min.max){
retrun Math.floor(Math.random()* (max - min) + min);
}
写一个函数,获取从min都max之间的随机整数,包括min包括max:
function rand2(min,max){
retrun Math.floor(Math.random()*(++max-min)+min);
}
写一个函数,获取一个随机数组,数组中元素为长度为len,最小值为min,最大值为max(包括)的随机整数:
function rand3(len,min,max) {
var arr = [];
for(var i = 0; i < len; i++){
arr.push(Math.floor(Math.random()* (max+1-min)) + min);
}
return arr;
}
console.log(rand3(20,1,10));
//返回[6, 3, 2, 8, 1, 2, 9, 2, 5, 2, 8, 7, 10, 2, 3, 2, 7, 8, 5, 1]
写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。:
function getRandStr(len){
var str = '';
var obj= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for(var i = 0; i < len; i++){
str += dict[Math.floor(Math.random()*obj.length)];
}
return str;
}
var str = getRandStr(8);
console.log(str);
// 返回oXivFBGj
网友评论