解决问题2

21.将一个任意长的数字变成逗号分隔的格式
方法一:
 format_number(n){
      let b=parseInt(n).toString();
      let len=b.length;
      if(len<=3){return b;}
      let r=len%3;
      return r>0?b.slice(0,r)+","+b.slice(r,len).match(/\d{3}/g).join(","):b.slice(r,len).match(/\d{3}/g).join(",");
  },
方法二:
  format_number(str){
      return str=str.split('').reverse().join('').replace(/(\d{3})/g,'$1,').replace(/\,$/,'').split('').reverse().join('');
   },
方法三:
  formatText(str){      
    var _str=item.remainAmount.toString();   
    var    _delimiter=',';
    var  regText='\\d{1,'+3+'}(?=(\\d{'+3+'})+$)';        
    var  reg=new  RegExp(regText,'g');   
    return  _str.replace(/^(-?)(\d+)((\.\d+)?)$/, 
    function($0, $1, $2, $3) {
          return   $1 + $2.replace(reg, '$&,') + $3; })
   }
方法四:

var s = '1234564656,000.00';
var d=s.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
alert(d)


22. 尽可能全面正确的解析一个任意url的所有参数为Object

var url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&d&enabled';
parseParam(url);
结果:
{
user: 'anonymous',
id: [123, 456], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
city: '北京', // 中文
enabled: true, // 未指定值的 key 约定值为 true
}

23. 实现一个简单的模板引擎

render('我是{{name}},年龄{{age}},性别{{sex}}',{
name:'姓名',
age:18
})
// 结果: 我是姓名,年龄18,性别undefined。


var render = function(tpl,data){
return tpl.replace(
/{{(.+?)}}/g,
function(m,m1){
return data[m1]
})
}
//注释:/{{(.+?)}}/g:在全部范围内查找匹配前后有两组花括号的字符串


24. 有一个全局变量 a,有一个全局函数 b,实现一个方法bindData,执行后,a的任何赋值都会触发b的执行。

var a = 1;
function b(){
console.log('a的值发生改变');
}
bindData();
a = 2; // 此时输出 a的值发生改变


function bindData(target, event){
for(var key in target) {
if(target.hasOwnProperty(key)) {
(function(){
var v = target[key];
Object.defineProperty(target, key, {
get: function() {
return v;
},
set: function(_value) {
v = _value;
event.call(this)
}
})
})()
}
}
}


25. 实现一个 js 的 class ,名字叫做:AnimateToNum,功能是从某个数字递增或者递减到另外一个数字,并且不管数字如何变化,都可以在指定的时间内完成。

var AnimateToNum = require("animate-num");

var numAnim = new AnimateToNum({
animTime:2000, //每次数字变动持续的时间(ms),
initNum:500, //初始化的数字
onChange:function(num){
console.log(num);
}
});

numAnim.toNum(100); // 从500变化到100,用2000ms的时间,在onChange回调中会一直从500倒数到100

26. 递归

现提供几个读取文件的方法,不借助全局变量实现一个函数,函数可以执行一次后返回一个目录下所有文件中是 .js 后缀的文件列表
var readdirSync = function(dir_path){ return [filename] } // 读取一个文件夹下的所有文件夹和文件的路径列表(Array)
var isDirectory = function(path) { return true/false; } // 判断一个路径是否是文件夹
var existsSync = function(path){ return true/false;} // 判断一个文件/文件夹是否存在

var getJSFiles = function(path) {

}
getJSFiles('/code/'); // return 一个文件列表的数组

var getJSFiles = function(path) {
var result = [];
if(existsSync(path)) {
if(isDirectory(path)) {
var files = readdirSync(path);
files.forEach((file) => {
result = result.concat(getJSFiles(file));
});
} else if(/.js$/.test(path)) {
result.push(path);
}
}
return result;
}

27. 请封装一个 CustomFetch 方法,利用原生的 fetch api,但是实现以下几个需求:

所有请求默认带上一个 token,值是 xxx
请求返回的时候,内部解析内容,并且判断 success 字段是否是 true,如果不是,在 catch 中可以拿到一个Error,message 和 code 是接口返回的对应的内容

CustomFetch("http://api.com/api").then((data)=>{
console.log(data); // 如果后台返回 true
}).catch((e)=>{
console.log(e.message); // 输出 “查询错误”
});

// 接口的返回模式
{
success: false,
code: 'QUERY_ERROR',
data: {},
message: '查询错误'
}

28. 将数字转换成中文大写的表示,处理到万级别,例如 12345 -> 一万二千三百四十五

function toLowerNum(){

}
console.log(toLowerNum(12345)); // 输出 一万二千三百四十五
console.log(toLowerNum(10001)); // 输出 一万零一
console.log(toLowerNum(10011)); // 输出 一万零十一
console.log(toLowerNum(10000)); // 输出 一万

function toLowerNum(num){
var number = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] // 定义中文数字
var unit = ['', '十', '百', '千', '万'] // 定义中文基
var resultStr = []
var len = 0 // 数字长
var lastNumNotZero = false
while(num){
let n = num % 10
let u = len >= unit.length ? len % 5 + 1 : len % 5

    // console.log(n, u, len)
    // 添加基
    // if(n || (len >= unit.length && lastNumNotZero))
    if(
        n // 当前位存在
        || // 或者
        ( u == unit.length - 1 && // u 和 长度均为 最后一位unit
            len == unit.length - 1
        )
    )
        resultStr.unshift(unit[u])

    // 处理数
    if(
        n || lastNumNotZero // 当前位和前一位不都为零则处理
        && 
        u !== unit.length - 1 // 且当前位不为最后一位基
    ) 
        resultStr.unshift(number[n])
    lastNumNotZero = !!n
    len++
    num = Math.floor(num / 10)
}
return resultStr.join('')

}

29. 算法题,实现一个函数,可以判断 a 字符串是否被包含在 b 字符串中

不能用原生api,自己实现一个字符串查找
我:
var b='abcabcdef'
var a='cde'
var j = 0;
var m=0;
var result = false;
for(var i=0;i<a.length;i++){
while(j<b.length&&a[i] != b[j]){
j++;
}
j++;
if(a[i]!=b[j]) m++
else m=0
}
if(m==a.length) result = true

http://blog.csdn.net/buaa_shang/article/details/9907183

var b='abcabcdef'
var a='cde'
var j = 0;
var m=0;
var result = false;
for(var i=0;i<a.length;i++){
while(j<b.length&&a[i] != b[j]){
j++;
}
j++;
if(a[i]!=b[j]) m++
else m=0
}
if(m==a.length) result = true

30. 下面五段代码分别输出什么?并且什么时候输出什么?

for(var i = 0; i < 5; i++) {
console.log(i);
}
for(var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000 * i);
}
for(var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, i * 1000);
})(i);
}
for(var i = 0; i < 5; i++) {
(function() {
setTimeout(function() {
console.log(i);
}, i * 1000);
})(i);
}
for(var i = 0; i < 5; i++) {
setTimeout((function(i) {
console.log(i);
})(i), i * 1000);
}

31. 判断一个点是否在多边形内

答:从当前点画一条水平射线,判断射线与多边形各条边相交多少次,偶数次就是在多边形内

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容