<h4>1.数组方法里
push
、pop
、shift
、unshift
、join
、split
分别是什么作用?</h4><li>push方法用于数组,在数组的末端添加一个或者多个元素元素,并返回添加新元素后的数组的长度。注意:该方法会改变原来的数组
var a = [];
a.push(1) //1
a.push('abc') //2
a.push(ture,{}) //4
console.log(a);
a//[1,'abc',ture,{}];
<li>pop方法作用于数组,用于删除数组最后的一个元素,并返回该元素。注意:该方法会改变原来的数组。
var a = [1,2,3];
a.pop() //3
a.pop() //2
a//[1]
<li>shift方法作用于数组,用于删除数组的第一位元素,并返回该元素,意:该方法会改变原数组。
var a = [1,2,3,4,5];
a.shift(); //1
a.shift(); //2
a//[3,4,5]
<li>unshift方法作用于数组,可以在数组的第一位添加元素,并返回该数组的长度,意:该方法会改变原数组。
var a = [1,2,3,4];
a.unshift('b');//5
a//["b",1,2,3,4]
<li>join方法是以参数作为分隔符,将所有数组成员组成一个字符串返回,如果不能提供参数,则默认用逗号分隔。
var a = [1, 2, 3, 4];
a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"
<li>split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。
'a|b|c'.split('|') // ["a", "b", "c"]
如果分割规则为空字符串,则返回数组的成员是原字符串的每一个字符。
'a|b|c'.split('') // ["a", "|", "b", "|", "c"]
如果省略参数,则返回数组的唯一成员就是原字符串。
'a|b|c'.split() // ["a|b|c"]
如果满足分割规则的两个部分紧邻着(即中间没有其他字符),则返回数组之中会有一个空字符串。
'a||c'.split('|') // ['a', '', 'c']
<h4>2.代码:</h4>
1.用 splice
实现 push
、pop
、shift
、unshift
方法
<li>splice方法作用于数组,可用于删除一部分原数组的成员,并可以在删除的位置添加新加入的数组成员,并返回被删除的数组成员,注意原数组被改变。
<li>splice的第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
var a = [1,2,3,4,5,6];
a.splice(1,3) //[2,3,4]
a.splice(0,1,2,3,4) //1
a //[2,3,4,5,6]
a.splice(0,0,1) //[]
a //[1,2,3,4,5,6]
<li>.push的splice实现方式:
var a = [1,2,3,4,5,6];
function push(item,val){
a.splice(a.length,0,val);
return a.length;
}
<li>,pop方法的splice实现方式:
var arr = [1,2,3,4,5,6]
function pop(item){
return arr.splice(arr.length-1,arr.length)[0];
}
<li>.shift的splice实现方式:
var arr = [1,2,3,4,5,6]
function shift(item){
return arr.splice(0,1)[0];
}
<li>.unshift的splice实现方式:
var arr = [1,2,3,4,5,6]
function unshift(item,val){
arr.splice(0,0,val);
return arr.length;
}
2.使用数组拼接出如下字符串
代码如下:
var prod = {
name: '女装',
styles: ['短款', '冬季', '春装']
};
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>');
}
htmls.push('</dl>');
return htmls.join('\r');
};
console.log(getTpl(prod));
3.写一个find函数,实现下面的功能
var arr = [ "test", 2, 1.5, false ]
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1
find函数代码:
<script>
var arr = ["test",2,1.5,false];
function find(data,val){
return data.indexOf(val);
}
</script>
4.写一个函数filterNumeric,把数组 arr 中的数字过滤出来赋值给新数组newarr, 原数组arr不变?
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr); // [1,3,5,2]
代码一:
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumberic(arr);
function filterNumberic(data){
var newarr = [];
for(i=0;i<data.length;i++){
if(typeof data[i] === "number"){
newarr.push(data[i]);
}
}
return newarr;
}
方法二:使用filter方法
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumberic(arr); //[1,3,5,2]
function filterNumberic(arrayName){
return arrayName.filter(function(elem){
return typeof elem === "number"
})
}
5.对象obj有个className属性,里面的值为的是空格分割的字符串(和html元素的class特性类似),写addClass
、removeClass
函数,有如下功能:
var obj = {
className: 'open menu'
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open') // 因为open已经存在,所以不会再次添加open
addClass(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不存在,所以此操作无任何影响
addClass代码:
var obj = {
className: 'open menu'
};
function addClass(obj,ele){
var arr = obj.className.split(' ');
for(i=0;i<arr.length;i++){
if (arr[i] === ele) {
return;
}else{
arr.push(ele);
obj.className = arr.join(' ');
}
}
}
removeClass代码:
var obj = {
className: 'open menu'
};
function removeClass(obj,ele){
var arr = obj.className.split(' ');
if(arr.indexOf (ele) === -1){
return;
}else{
arr.splice(arr.indexOf (ele) , 1 );
obj.className = arr.join(' ');
}
}
6.写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串?
camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'
代码
function camelize(data){
var a = data.split('-');
return a.join('')
}
7.如下代码输出什么?为什么?
arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );
arr[arr.length-1]() // ?
答:控制台输出hello hunger valley,弹出窗口为undefined。
因为:arr.push()添加了一个function函数,函数体内alert包裹着一个console.log('hello hunger valley')。而arr'[' arr.length-1 ']'()是执行数组的长度减一的元素,即是最后一个元素,所有选中最后一个元素,而()又调用了这个元素,函数先执行console.log('hello hunger valley'),在控制台打印出hello hunger valley,并且返回一个undefined,因此alter弹窗弹出一个undefined。
8.写一个函数isPalindrome,判断一个字符串是不是回文字符串(正读和反读一样,比如 abcdcba 是回文字符串, abcdefg不是)写一个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 isPalindrome(data){
var arr = data.split('');
if(data == arr.reverse().join('')){
return true;
}else{
return false;
}
}
var a = 'abccba'
var b = 'abcdefg'
代码二(按年龄排序)
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(data){
data.sort(function(a,b){
return a.age-b.age;
})
};
console.log(people);
8.写一个filter(arr, func) 函数用于过滤数组,接受两个参数,第一个是要处理的数组,第二个参数是回调函数(回调函数遍历接受每一个数组元素,当函数返回true时保留该元素,否则删除该元素)。实现如下功能:
console.log(people);
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的整数
代码:
function isNumber (el){
return typeof el === 'number';
}
function filter(arr,func){
new a = [];
for(var i = 0; i < arr.length ; i++){
if(func(arr[i])){
a.push(arr[i]);
}
}
return a;
}
<h3>字符串</h3>
1.写一个 ucFirst函数,返回第一个字母为大写的字符
ucFirst("hunger") == "Hunger"
代码:
function ucFirst(str){
return str[0].toUpperCase()+str.slice(1,str.length);
}
2.写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上...,如
truncate("hello, this is hunger valley,", 10)) == "hello, thi...";
truncate("hello world", 20)) == "hello world"
代码:
function truncate(str,maxlength){
var newstr
if(str.length>maxlength){
return newstr = str.slice(0,maxlength)+'...';
}else{
return str
}
}
<h3>数学函数</h3>
1.写一个函数,获取从min到max之间的随机整数,包括min不包括max?
function getRandStr(min,max){
return Math.floor(Math.random()*(max-min))
}
2.写一个函数,获取从min都max之间的随机整数,包括min包括max?
function getRandStr(min,max){
return Math.floor(Math.random()*(max-min+1))+min
}
3.写一个函数,获取一个随机数组,数组中元素为长度为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;
}
4.写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
function getRandStr(len){
//todo...
}
var str = getRandStr(10); // 0a3iJiRZap
代码
function getRandStr(len){
var str='';
var strRand ;
var target='0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ';
for(var i = 0; i < len; i++){
strRand = Math.floor(Math.random()*target.length);
str += target[strRand];
}
return str
}
参考资料:
<a href="http://javascript.ruanyifeng.com/stdlib/math.html">院一峰JS教程</a>
</br>
版权归饥人谷peter和饥人谷所有,若有转载,请注明来源
感谢吃瓜子观众: