1. 数组方法里pop
,push
,shift
,unshift
,join
,split
分别有什么作用?
var arr = [3, 5, 6, 3, 8, 3, 9]
i. pop
的作用是删除数组的最后一个元素
arr.pop () // [3, 5, 6, 3, 8, 3]
ii.``` push```的作用是在数组最后添加一个元素
- ```
arr.push (10) // [3, 5, 6, 3, 8, 3, 9, 10]
iii.shift
的作用是在删除数组的第一个元素
arr.shift () // [5, 6, 3, 8, 3, 9]
iv.```unshift```的作用是在数组的最前面添加一个元素
- ```
arr.unshift (12) // [12, 3, 5, 6, 3, 8, 3, 9]
v.join
方法的作用是将数组使用参数作为连接符链接成一个字符串,不会修改原数组的内容
arr.join ( '-' ) // '3-5-6-3-8-3-9'
vi.```split```方法可以用来增加、删除、插入或修改数组中的元素
- ```
var arr = [1, 5, 7, 3, 21, 32]
- 删除
arr. splice (1, 2) // [1, 3, 21, 32] ```
- 添加
arr. splice (2, 0, 8, 9) // [1, 5, 8, 9, 7, 3, 21, 32]```
- 插入/修改
arr. splice (2, 0, 5, 4) // [1, 5, 5, 4, 7, 3, 21, 32]
arr. splice (2, 3, 6, 7) // [1, 5, 6, 7, 32]
代码题
* <u>数组</u> *
1. 用splice
实现pop
,push
,shift
,unshift
方法
// pop 方法 --------------------- var arr1 = [2, 6, 2, 8, 4, 9]; function pop(arr) { var a = arr[arr.length-1] arr.splice (arr.length-1, 1); return a; } // push 方法 --------------------- var arr2 = [2, 6, 2, 8, 4, 9]; function push(arr, val) { arr.splice (arr.length, 0, val); return arr.length; } // shift 方法 --------------------- var arr3 = [2, 6, 2, 8, 4, 9]; function shift(arr) { arr.splice (0,1); return arr(0); } // unshift 方法 --------------------- var arr4 = [2, 6, 2, 8, 4, 9]; function unshift(arr, val) { arr.splice (0,0,val); return arr.length; }
###2. 使用数组拼接出如下字符串:
[代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-2%E6%95%B0%E7%BB%84.html)
- ```
var prod = {
name: '女装',
styles: ['短款', '冬季', '春装']
};
function getTpl(data){
var tp1 = '<dl class="product">';
tp1 += '<dt>' + data.name + '</dt>';
for (var i = 0; i < data.styles.length; i++) {
tp1 += '<dd>' + data.styles[i] + '</dd>';
}
tp1 += '</dl>';
return tp1;
};
var result = getTpl(prod);
console.log (result);
3. 写一个find函数,实现下面功能
var arr = [ "test", 2, 1.5, false ] function find(arr,val) { for (var i=0; i<arr.length; i++) { if (arr[i] === val) { var a = i; }; } var b = a != undefined ? a : -1; return b } find(arr, "test") // 0 find(arr, 2) // 1 find(arr, 0) // -11
###4. 写一个函数```filterNumeric```,把数组 ```arr```中的数字过滤出来赋值给新数组```newarr```, 原数组```arr```不变
[代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-4%E6%95%B0%E7%BB%84.html)
- ```
var arr = ["a", "b", 1, 3, 5, "b", 2];
function filterNumeric(arr) {
var newarr = [];
for (var i=0; i<arr.length; i++) {
if (typeof arr[i] === 'number') {
newarr.push(arr[i]);
};
};
return newarr;
}
newarr = filterNumeric(arr); // [1,3,5,2]
5. 对象obj
有个className
属性,里面的值为的是空格分割的字符串(和html
元素的class
特性类似),写addClass
、removeClass
函数,有如下功能:
var obj = { className: 'open menu' } // 定义函数 addClass(obj,str) ------------------------------------------ function addClass(obj,str) { var a = true; var b, c; var arr = (obj.className).split(' '); // 将字符串转化为数组 for (var i=0; i<arr.length;i++) { // 遍历数组arr,判断数组中是否有与str相同的元素 if (arr[i] === str) { a = false; // 若存在,a改为false }; }; arr.push(str); // 将str添加到数组arr最后 b = str + '不存在,所以' + 'obj.className变为' + '\'' + arr.join(' ') + '\''; c = '因为'+ str + '已经存在,所以不会再次添加' + str; if (a) { obj.className = arr.join(' '); return b; } else { return c; } } 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,str) --------------------------------------- function removeClass(obj,str) { var a = false; var b, c, d; var arr = (obj.className).split(' '); // 将字符串转化为数组 for (var i=0; i<arr.length;i++) { // 遍历数组,判断arr中是否存在与str相同的元素 if (arr[i] === str) { a = true; // 如果存在相同元素,a变为true arr.splice (i, 1) // 在arr中将相同的元素删除 }; }; b = arr.join(' '); c = '去掉obj.className里面的' + str + ',变成' + '\'' + b + '\''; d = '因为' + str + '不存在,所以此操作无任何影响'; if (a) { obj.className = b; return c; } else { return d } } removeClass(obj, 'open') // 去掉obj.className里面的 open,变成'menu new me' removeClass(obj, 'blabla') // 因为blabla不存在,所以此操作无任何影响
###6. 写一个```camelize```函数,把```my-short-string```形式的字符串转化成```myShortString```形式的字符串,如
[代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-6%E6%95%B0%E7%BB%84.html)
- ```
function camelize(str) {
var arr = str.split('-');
if (arr.length < 2) {
return;
}
for (var i = 1; i < arr.length; i++) {
arr[i] = arr[i].replace(arr[i][0], arr[i][0].toUpperCase());
}
return arr.join('');
}
7. 如下代码输出什么?为什么?
arr = ["a", "b"]; arr.push( function() { alert(console.log('hello hunger valley')) } ); // 此时arr变为["a","b",function(){...}] arr[arr.length-1]() // 调用函数,故输出'hello hunger valley',弹窗undefined
###8. 写一个函数```filterNumericInPlace```,过滤数组中的数字,删除非数字。要求在原数组上操作
[代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-8%E6%95%B0%E7%BB%84.html)
- ```
arr = ["a", "b", 1, 3, 4, 5, "b", 2];
//对原数组进行操作,不需要返回值
function filterNumericInPlace(arr) {
for (var i = arr.length-1; i>=0; i--) { // 因为是在原数组上操作,所以如果递增,会出现改变未经判断的元素的索引号,导致漏删,倒数递减则会避免这种情况
if (typeof(arr[i]) != 'number') {
arr.splice (i,1);
}
}
}
filterNumericInPlace(arr);
console.log(arr) // [1,3,4,5,2]
9. 写一个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 ] function ageSort(arr) { arr.sort(function(a, b){return a.age - b.age;}); } /* function ageSort(arr) { arr.sort( function(p1,p2) { return p1.age > p2.age; } ) } */ ageSort(people) // [ bob, mary, john ]
###10. 写一个```filter(arr, func)```函数用于过滤数组,接受两个参数,第一个是要处理的数组,第二个参数是回调函数(回调函数遍历接受每一个数组元素,当函数返回```true```时保留该元素,否则删除该元素)。实现如下功能:
[代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-10%E6%95%B0%E7%BB%84.html)
- ```
function isNumeric (el){
return typeof el === 'number';
}
arr = ["a",3,4,true, -1, 2, "b"]
function filter(arr,func) {
for (var i = arr.length-1; i>=0; i--) {
if (func(arr[i]) === false) {
arr.splice(i,1);
};
};
return arr;
}
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的整数
* <u>字符串</u> *
11. 写一个 ucFirst
函数,返回第一个字母为大写的字符
function ucFirst(str) { var arr = str.split(''); arr[0] = arr[0].toUpperCase(); return arr.join(''); } ucFirst("hunger") // "Hunger"
###12. 写一个函数```truncate(str, maxlength)```, 如果```str```的长度大于```maxlength```,会把```str```截断到```maxlength````长,并加上...,如:
[代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-12%E5%AD%97%E7%AC%A6%E4%B8%B2.html)
- ```
function truncate(str,num) {
var arr = str.split('');
if (arr.length > num) {
arr.length = num;
arr[arr.length-1] = arr[arr.length-1] + '...';
return arr.join('');
} else {
return str;
}
}
// truncate("hello, this is hunger valley,", 10) == "hello, thi...";
// truncate("hello world", 20)) == "hello world"
* <u>数学函数</u> *
13. 写一个函数,获取从min到max之间的随机整数,包括min不包括max
function randomNumber1(min,max) { return parseInt(Math.random()*(max-min)+min); }
###14. 写一个函数,获取从min都max之间的随机整数,包括min包括max
- ```
function randomNumber2(min,max) {
return parseInt(Math.random()*(max-min+1)+min);
}
15. 写一个函数,获取一个随机数组,数组中元素为长度为len,最小值为min,最大值为max(包括)的随机整数
function randomArr(min,max,len) { var arr = []; for (var i=0; i<len; i++) { arr[i] = randomNumber2(min,max); } return arr; }
###16. 写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
- ```
var DataRange = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
function getRandStr (len) {
var arr = [];
var n;
for (var i=0; i<len; i++) {
n = parseInt(Math.random()*62);
arr[i] = DataRange[n];
}
return arr.join('');
}
本教程版权归本人和饥人谷所有,转载请注明来源。
网友评论