JavaScript 练习题

这份练习题会持续更新!

1. 计算两个日期的天数差

函数模板

function daySpan (date1, date2) {
  // your code
}

函数参数

  • date1: Date 第一个日期
  • date2: Date 第二个日期

调用样例

daySpan(new Date(2016, 2, 7), new Date(2016, 4, 12))     // 66
daySpan(new Date(2016, 4, 12), new Date(2016, 2, 7))     // 66

2. 计算两个日期的天数差 - 高级版

函数模板

function daySpan (date1, date2) {
  // your code
}

函数参数

  • date1: String 第一个日期
  • date2: String 第二个日期

这两个日期字符串都会按照YYYY-MM-DD的格式输入,如2016-10-09

调用样例

daySpan('2016-02-07', '2016-04-12')     // 65
daySpan('2016-04-12', '2016-02-07')     // 65

3. 计算数组中元素重复次数

函数模板

function countRepeat (arr) {
  // your code
}

函数参数

  • arr: Array<Number> 仅包含数字的数组

调用样例

countRepeat([2, 9, 8, 4, 5, 3, 4, 8, 9, 9, 1, 0, 2, 1])
/* 顺序不影响结果
{
  '0': 1,
  '1': 2,
  '2': 2,
  '3': 1,
  '4': 2,
  '5': 1,
  '8': 2,
  '9': 3
} */

4. 驼峰转换函数

在代码的世界里,标识符中不能有空格, 但有时一个变量必须由两个或更多个单词来表达,如count repeatget own poperty descriptor等。 这时候就必须把他们写成第一个单词全小写,第二个以及后面的单词,除了首字母全小写的形式(即驼峰), 如countRepeatgetOwnPropertyDescriptor

下面你需要编写一个函数来实现这个功能

函数模板

function camelCase (str) {
  // your code
}

函数参数

  • str: String 要转换的字符串,可能的形式看下面的例子

调用样例

camelCase('hey guys')           // 'heyGuys'
camelCase('HELLO-world')        // 'helloWorld'
camelCase('oh  mY---gOd')       // 'ohMyGod'

5. 寻找字符串中第一个未重复的字符

寻找字符串中第一个未重复的字符,如果没有找到,则返回一个空字符串(''

函数模板

function firstNonRepeat (str) {
  // your code
}

函数参数

  • str: String 要寻找的字符串,可能是任何内容

调用样例

firstNonRepeat('aaabccc')     // 'b'
firstNonRepeat('aabccbd')     // 'd'
firstNonRepeat('aabxbcc')     // 'x'
firstNonRepeat('6666666')     // ''

6. 展平数组

数组中可以嵌套数组,要嵌套多少层都可以,比如[1, 2, [[3], 4]]。 这样看起来很不爽,所以我们要把它展开,只留下一层数组: [1, 2, 3, 4]

提示:判断xxx是否是数组的方法为 Array.isArray(xxx)

函数模板

function flatten (arr) {
  // your code
}

函数参数

  • arr: Array 包含嵌套数组的数组

调用样例

flatten([1, 2, 3])                // [1, 2, 3]
flatten([1, 2, [3]])              // [1, 2, 3]
flatten([1, 2, [[3], 4]])         // [1, 2, 3, 4]
flatten([1, [2, [[3], [4]]]])     // [1, 2, 3, 4]

7. 判断空对象

在 JavaScript 编程中,经常我们要判断某个变量是否为空对象,而不是 null 或者 undefined,那么,请实现一个函数判断变量是否为空对象。

函数模板

function isEmptyObject (obj) {
  // your code
}

函数参数

  • obj: mixed 可能为空对象的任何类型变量

调用样例

isEmptyObject({})              // true
isEmptyObject(null)            // false
isEmptyObject(undefined)       // false
isEmptyObject('{}')            // false
isEmptyObject([])              // false
isEmptyObject(true)            // false

8. 数组去重

返回一个无重复值的数组

函数模板

function unique (arr) {
  // your code
}

函数参数

  • arr: Array 反正就是一个数组

调用示例

unique([1, 2, 3, 4, 4, 5, 8, 6, 3, 2, 1])   // [1, 2, 3, 4, 5, 8, 6]

9. 实现一个 reduce 函数

reduce 是函数式编程中十分重要的一个函数,请实现一个 reduce 函数,可以参考 [].reduce

函数模板

function reduce (arr, func, initialValue) {
  // your code
}

函数参数

  • arr: Array 调用 reduce 的数组
  • func: Function reduce 执行数组中每个值的函数,包含两个参数
    • previousValue 上一次调用回调返回的值,或者是提供的初始值(initialValue
    • currentValue 数组中当前被处理的元素
  • initialValue:mixed 作为第一次调用 callback 的第一个参数。

调用示例

var total = reduce([0, 1, 2, 3], function (previousValue, currentValue) {
  return previousValue + currentValue
}, 0)
// total === 6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值