一、准备工作,下面五个解题都会用到 "use strict"; // * 定义域名空间 var SOE = {}; SOE.arr = [2, 3, 4, 5]; // add , subtract , multiply and divide SOE.add = function (x, y) { return x - 0 + y - 0; }; SOE.mult = function (x, y) { return x * y; }; // * number,number,number,string,boolean,Array,Object,function,function,number,Null,Date,RegExp,Error // * 返回变量的类型,如上几种。 SOE.SogetVarType = function (val = 0) { var type = typeof val; // object需要使用Object.prototype.toString.call判断 if (type === "object") { var typeStr = Object.prototype.toString.call(val); // 解析[object String] typeStr = typeStr.split(" ")[1]; type = typeStr.substring(0, typeStr.length - 1); } return type; };
// ? A0001:使用reduce,编写一个数组内部各值的求和函数 SOE.arrAdd = function (...rest) { console.log(arguments); console.log(rest); if (SOE.SogetVarType(rest[0]) === "Array") { // return rest.reduce(SOE.sum); // [ 2, 3, 4, 5 ] // return arguments.reduce(SOE.sum); // TypeError: arguments.reduce is not a function // return rest[0].reduce(SOE.sum); // 14 // return SOE.arr.reduce(SOE.sum); // 14 return arguments["0"].reduce(SOE.add); // 14 } else { return NaN; } }; console.log(SOE.arrAdd(SOE.arr));
// ? A0002:使用reduce,编写一个数组内部各值的求积函数 // !!! reduce需要有两个参数, SOE.arrMult = function (...rest) { console.log(arguments); console.log(rest); if (SOE.SogetVarType(rest[0]) === "Array") { // return rest.reduce(SOE.sum); // [ 2, 3, 4, 5 ] // return arguments.reduce(SOE.sum); // TypeError: arguments.reduce is not a function // return rest[0].reduce(SOE.sum); // 14 // return SOE.arr.reduce(SOE.sum); // 14 return arguments["0"].reduce(SOE.mult); // 14 } else { return NaN; } }; console.log(SOE.arrMult(SOE.arr));
// ? A003: var arr = ['小明', '小红', '大军', '阿黄'] ,实现在新生欢迎会上,你已经拿到了新同学的名单,请排序后显示:欢迎XXX,XXX,XXX和XXX同学! var log = console.log; var arr = ["小明", "小红", "大军", "阿黄"]; console.log( `欢迎arr.sort().slice(0,3).jion(",")和arr.sort().slice(arr.length-1)同学!` );
// ?A004请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。 log = console.log; var arr = ["adam", "LISA", "barT"]; var SOE = {}; SOE.strUpperLower = function (arr) { return arr.map((s) => s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase()); }; log(SOE.strUpperLower(arr));
// ?A005小明希望利用map()把字符串数组['1', '2', '3']变成整数 var log = console.log; var arr = ["1", "2", "3"]; var SOE = {}; SOE.string2int = function (arr) { /* map方法的函数只要一个参数,但是map传递的参数有三个,分别是:数组元素、元素索引,数组本身,而paresInt是可以接受两个参数的,第一个是字符,第二个是进制。 ['1', '2', '3'].map(paresInt) 相当于 ['1', '2', '3'].map(paresInt(value, index)) 执行的内在逻辑就是: 第一个元素就是:paresInt('1', 0) > 1 第二个元素就是:paresInt('2', 1) > NaN 第三个元素就是:paresInt('3', 2) > NaN return arr.map(parseInt); */ return arr.map((x) => parseInt(x)); // return arr.map((x) => x - 0); // ?不推荐使用,因为x有可能非常大 }; log(SOE.string2int(arr)); // *[ 1, 2, 3 ] log(arr); // *[ '1', '2', '3' ],对原数组没有改变
// ? A006:不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数 var log = console.log; var str = "12345"; var SOE = {}; // 方法一:数字的字符串=》数组 SOE.arrMultAdd = function (s) { var arr = []; // * 下面是比较傻的写法,主要对string不熟悉 /* 方法一 for (var i = 0; i < s.length; i++) { // !arr.push(s[i] - 0); 这是个技巧,加法字符为大,减法数字为大 // !arr.push(s[i] * 1); 这是个技巧,加法字符为大,减法数字为大,乘法为大 // !arr.push(s[i]); 这是个技巧,加法字符为大,减法数字为大,乘法为大 } */ /* 方法二:比第一个方法代码少 for (var c of s) { arr.push(c); } */ // *方法三:直接使用js的内置函数 arr = s.split(""); /* return arr.reduce(function (x, y) { return x * 10 + y; }); */ // ?这条语句充满技巧 return arr.map((x) => x * 1).reduce((x, y) => x * 10 + y); }; log(SOE.arrMultAdd(str));
可以的兄弟
Sign in to make a reply
雏鹰