1. 查找数组元素位置
function indexOf(arr, item) {
return arr.indexOf(item);
}
2. 数组求和
function sum(arr) {
let res = 0;
for(let i = 0; i < arr.length; i ++){
res += arr[i];
}
return res;
}
forEach
function sum(arr) {
let res = 0;
arr.forEach((value, index, array) => {
res += value;
})
return res;
}
reduce
function sum(arr) {
return arr.reduce((pre,cur) =>{
return pre + cur;
})
}
3. 移除数组中的元素 返回新数组
filter
function remove(arr, item) {
return arr.filter((res) => {
return res != item;
})
}
for+push
function remove(arr, item) {
let res = [];
arr.forEach((value, index) => {
if(value != item) {
res.push(value);
}
})
return res;
}
4. 移除数组中的元素 修改原数组
splice
function removeWithoutCopy(arr, item) {
for(let i = 0; i < arr.length; i ++) {
if(arr[i] === item){
arr.splice(i,1);
i --;
}
}
return arr;
}
原数组减少一个元素后,i--
5. 添加元素 返回新数组
concat
function append(arr, item) {
return arr.concat(item);
}
...扩展
function append(arr, item) {
return [...arr, item];
}
for \ slice浅拷贝 + push
6 删除数组最后一个元素
返回一个新数组
function truncate(arr) {
let newarr = arr.slice(0)
newarr.pop()
return newarr
}
7 添加元素
function prepend(arr, item) {
let newarr = arr.slice(0);
newarr.unshift(item);
return newarr;
}
8 删除数组第一个元素
function curtail(arr) {
let newarr = arr.slice(0);
newarr.shift();
return newarr;
}
9 数组合并
function concat(arr1, arr2) {
let newarr = arr1.concat(arr2);
return newarr;
}
function concat(arr1, arr2) {
let newarr = [...arr1, ...arr2];
return newarr;
}
10 添加元素(指定位置添加)
function insert(arr, item, index) {
let newarr = arr.slice(0);
newarr.splice(index, 0, item);
return newarr;
}
11 计数
function count(arr, item) {
let num = 0;
arr.forEach(val => {
if(val === item) num ++;
})
return num;
}
12 查找重复元素
function duplicates(arr) {
let res = [];
arr.forEach( v => {
if(arr.indexOf(v) !== arr.lastIndexOf(v) && res.indexOf(v) === -1){
res.push(v);
}
})
return res;
}
13 求二次方
function square(arr) {
let res = arr.map((value, index, array) => {
return value * value;
});
return res;
}
14 查找元素位置
function findAllOccurrences(arr, target) {
let res = [];
arr.forEach((value, index) => {
if(value === target) {
res.push(index);
}
});
return res;
}
15 避免全局变量
function globals() {
// 加上 let
let myObject = {
name : 'Jory'
};
return myObject;
}
16 正确的函数定义
function functions(flag) {
if (flag) {
var getValue = function() { return 'a'; }
} else {
var getValue = function() { return 'b'; }
}
return getValue();
}
17 正确使用parseInt
function parse2Int(num) {
return parseInt(num, 10);
}
18 完全相等
function identity(val1, val2) {
return val1 === val2;
}
19 计时器
function count(start, end) {
console.log(start++);
var timer = setInterval(
function(){
if(start <= end) {
console.log(start++);
}else{
clearInterval(timer);
}
}, 100);
return {
cancel: function(){
clearInterval(timer);
}
}
}
20 流程控制
function fizzBuzz(num) {
if(num % 3 === 0 && num % 5 === 0) {
return 'fizzbuzz';
}else if(num % 3 === 0) {
return 'fizz';
}else if(num % 5 === 0) {
return 'buzz';
}else if(num === null || typeof num !== 'number'){
return false;
}else{
return num;
}
}
21 函数传参
function argsAsArray(fn, arr) {
return fn.apply(this, arr);
}
22 函数的上下文
//apply
function speak(fn, obj) {
return fn.apply(obj);
}
//call
function speak(fn, obj) {
return fn.call(obj);
}
//bind
function speak(fn, obj) {
return fn.bind(obj)();
}
23 返回函数
function functionFunction(str) {
return f = function(str2) {
return str + ', ' + str2;
}
}
24 使用闭包
function makeClosures(arr, fn) {
let result = [];
// forEach 和 let可以规避
arr.forEach((index,value) => {
result.push(() => {
return fn(index);
})
})
return result;
}
立即执行函数
function makeClosures(arr, fn) {
var result = [];
// forEach 和 let可以规避
for(var i = 0; i < arr.length; i ++) {
(function (i) {
result[i] = function() {
return fn(arr[i])
}
})(i);
}
return result;
}
25 二次封装函数
function partial(fn, str1, str2) {
return function(str3) {
return fn(str1, str2, str3);
}
}
26 使用 arguments
function useArguments() {
let arr = Array.prototype.slice.call(arguments); //转化为数组
let res = 0;
arr.forEach((value) => {
res += value;
})
return res;
}
27 使用 apply 调用函数
function callIt(fn) {
return fn.apply(this, [].slice.call(arguments, 1))
}
28 二次封装函数
function partialUsingArguments(fn) {
let args = [].slice.call(arguments, 1);
return reslut = function() {
return fn.apply(this, args.concat([].slice.call(arguments)));
}
}
29 柯里化 难
function curryIt(fn) {
let args = [];
let result = function(arg) {
args.push(arg);
if(args.length < fn.length) {
return result;
}else{
return fn.apply(this, args);
}
}
return result;
}
30 或运算
function or(a, b) {
return (a || b);
}
31 且运算
function and(a, b) {
return (a && b);
}
32 模块
function createModule(str1, str2) {
let obj = {
greeting: str1,
name: str2,
sayIt: function(){
return obj.greeting + ', ' + obj.name;
}
}
return obj;
}
33 二进制转换
function valueAtBit(num, bit) {
let res = num.toString(2);
return res[res.length - bit];
}
34 二进制转换
function base10(str) {
return parseInt(str, 2);
}
35 二进制转换
function convertToBinary(num) {
let res = num.toString(2);
while(res.length < 8) {
res = '0' + res;
}
return res;
}
36 乘法
function multiply(a, b) {
let str1 = a.toString();
let str2 = b.toString();
let lenA = (str1.indexOf('.') === -1) ? 0: (str1.length - 1 - str1.indexOf('.'))
let lenB = (str2.indexOf('.') === -1) ? 0: (str2.length - 1 - str2.indexOf('.'))
let len = Math.max(lenA, lenB);
let result = parseFloat(a * b).toFixed(len);
return result;
}
37 改变上下文
function alterContext(fn, obj) {
return fn.apply(obj);
}
38 批量改变对象的属性
function alterObjects(constructor, greeting) {
constructor.prototype.greeting = greeting;
}
39 属性遍历
function iterate(obj) {
let result = [];
for(let key in obj){
if(obj.hasOwnProperty(key)){
result.push(key+": "+obj[key]);
}
}
return result;
}
40 判断是否包含数字
function containsNumber(str) {
return /\d./.test(str);
}
41 检查重复字符串
function containsRepeatingLetter(str) {
return /([a-zA-Z])\1/.test(str);
}
42 判断是否以元音字母结尾
function endsWithVowel(str) {
return /[a,e,i,o,u]$/i.test(str);
}
43 获取指定字符串
function captureThreeNumbers(str) {
let arr = str.match(/\d{3}/);
if(arr){
return arr[0];
}else{
return false;
}
}
44 判断是否符合指定格式
function matchesPattern(str) {
return /^\d{3}-\d{3}-\d{4}$/.test(str);
}
45 判断是否符合 USD 格式
function isUSD(str) {
return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
}