本文记录了我刚学习 JavaScript 时遇到的一些练习题,刚看到时可能会感觉很简单,但其中包含了一些容易被忽视的知识点,也从另一个方面体现了基础对于程序员是多么重要。
练习题的解答大多是我自己的理解,可能会存在思考不足的情况,或许有其他更优的解答,热烈欢迎大家拍砖指教。
因为练习题数量较多,篇幅太长不方便阅读,所以我分成了几个部分,跳转链接放在本文最后。
1. 解析 url 参数
请写一个函数,功能是将 url 中的参数解析出来。
示例:
- 输入:
http://www.xxxx.com/?a=1&b=2&city=%E5%8C%97%E4%BA%AC
- 输出:
{a:"1",b:"2",city:"北京"}
实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var url = 'http://www.xxxx.com/?a=1&b=2&city=%E5%8C%97%E4%BA%AC';
function getParameter(url) {
var url_arr = [];
var res = {};
url = url.substr(url.indexOf('?') + 1).replace(/&/g, '=');
url_arr = url.split('=');
for (var i = 0, len = url_arr.length; i < len; i++) {
if (i % 2 === 0) {
res[url_arr[i]] = url_arr[i + 1];
}
}
res.city = decodeURI(res.city);
return res;
}
console.log(getParameter(url));
2. 日期格式化
请写一个函数,formatDate(date, format),date 参数为 Date 对象,format 参数为 yyyy,MM,dd 及-的组合,返回格式化后的字符串,考虑各种情况
1
// TODO
3. 数组间隔插入空格
在一个数组里每隔 5 个元素插入一个空字符串,使其成为一个新的数组。
示例:
- 输入:
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
- 输出:
[1, 2, 3, 4, 5, " ", 6, 7, 8, 9, 10, " ", 11, 12, 13, 14, 15, " ", 16, 17]
实现一:
1
2
3
4
5
6
7
8
9
10
11
12
13
function myNewArr(arr) {
var res_arr = [];
for (var i = 0, len = arr.length; i < len; i++) {
res_arr.push(arr[i]);
if ((i + 1) % 5 === 0) {
res_arr.push('');
}
}
return res_arr;
}
console.log(myNewArr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]));
// >> [1, 2, 3, 4, 5, " ", 6, 7, 8, 9, 10, " ", 11, 12, 13, 14, 15, " ", 16, 17]
实现二:
1
2
3
4
5
6
7
8
9
10
function myNewArr(arr) {
var count = (arr.length / 5) | 0;
for (var i = 0; i < count; i++) {
arr.splice((i + 1) * 5 + i, 0, '');
}
return arr;
}
console.log(myNewArr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]));
// splice()里 +i 真是精髓
4. 不使用 for 循环打印
不使用 for 循环,实现打印 1~100
5. 数组整理
一个数组为 0、1 混乱交叉排列,共 100 个元素,如何在只遍历一次的情况下,整理数组,使之前面所有的数都为 0,后边所有的数都为 1。
6. 数组删除
请为 Array 增加一个原型方法:该方法的功能是删除数组中索引为 n 的那一项
实现:
1
2
3
4
5
6
7
8
Array.prototype.delKey = function (n) {
for (var i = n - 1, len = this.length; i < len; i++) {
this[i] = this[i + 1];
}
this.pop();
var res = this;
return res;
};