Discuss / JavaScript / 答案汇总

答案汇总

Topic source

雏鹰

#1 Created at ... [Delete] [Delete and Lock User]
一、准备工作,下面五个解题都会用到
"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));

可以的兄弟


  • 1

Reply