function countRepeat (arr) {
return arr.reduce((count,val) => ((count[val] = (count[val]0)+1),count),{});
}
调用结果
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
}
2. 驼峰转换函数
在代码的世界里,标识符中不能有空格,
但有时一个变量必须由两个或更多个单词来表达,如count repeat
、get own poperty descriptor
等。
这时候就必须把他们写成第一个单词全小写,第二个以及后面的单词,除了首字母全小写的形式(即驼峰),
如countRepeat
、getOwnPropertyDescriptor
编写一个函数来实现这个功能
function camelCase (str) {
let strArr = str.replace(/\s/g,'-').replace(/-+/g,'-').split('-');
let head = strArr.shift();
let newArr = [];
strArr.forEach(i => {
let h = i[0].toUpperCase();
newWord = h + i.slice(1,i.length).toLowerCase();
newArr.push(newWord);
});
newArr.unshift(head.toLowerCase());
return newArr.toString().replace(/,/g,'');
}
调用样例
camelCase('hey guys') // 'heyGuys'
camelCase('HELLO-world') // 'helloWorld'
camelCase('oh mY---gOd') // 'ohMyGod'
3. 寻找字符串中第一个未重复的字符
寻找字符串中第一个未重复的字符,如果没有找到,则返回一个空字符串(''
)
function firstNonRepeat (str) {
return str.split('').find((e,i,a)=>(a.indexOf(e) == i && a.indexOf(e, i + 1) == -1)));
}
调用样例
firstNonRepeat('aaabccc') // 'b'
firstNonRepeat('6666666') // ''
4. 展平数组
数组中可以嵌套数组,要嵌套多少层都可以,比如[1, 2, [[3], 4]]
。
这样看起来很不爽,所以我们要把它展开,只留下一层数组: [1, 2, 3, 4]
function flatten (arr) {
return arr.reduce((plane, toBeFlatten) => (plane.concat(Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten)), []);
}
调用样例
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]
测试网站