聊聊w3c刷题遇到的小坑

本文是lhyt本人原创,希望用通俗易懂的方法来理解一些细节和难点。转载时请注明出处。文章最早出现于本人github

0. 前言

近来很多人来问,去哪里刷题啊,我毫不犹豫回答w3c和牛客网,适合入门和进阶。然后,一些人就说了一些看起来好像能过却总是过不了的题目,于是我去试一下,大概找到一些对于新人进阶遇到的可能有点小坑的题目。

1.正题

1.1删除数组中特定值算法挑战(初级)

要求:删除数组中的所有的假值。

js中,假值有false、null、0、""、undefined 和 NaN,加上本身的类型转换机制,假值最终可以转化为false!所以,一个个选的话就悲催了。

function bouncer(arr) {

for (var i = 0; i < arr.length; i++) {

if(!!arr[i] === false){

arr.splice(i,1);

i--;

}

}

return arr;

}

1.2对象搜索算法挑战(中级)

要求:写一个 function方法,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。如果返回的数组中包含 source 对象的属性-值对,那么此对象的每一个属性-值对都必须存在于 collection 的对象中。注意:数组里面的对象出现的顺序不一定和第二个参数刚好顺序对应

我这里用了ES6的Object.entries方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值对数组。

function where(collection, source) {

var arr = [];

var q = []

arr = collection.map(function(i){

return Object.entries(i).join()

})

_source = Object.entries(source)

var a = 0

for(var k = 0;k

for(var j = 0;j<_source.length;j++){

if(arr[k].indexOf(_source[j].join())!=-1){

a++

}

}

if(a == _source.length){

a = 0

q.push(collection[k])

}else{

a = 0

}

}

return q

}

也可以尝试JSON.stringify

1.3质数求和算法挑战(中级)

要求:求小于等于给定数值的质数之和。

这里用到了求质数的那个正则

function sumPrimes(num) {

var arr = []

var sum = 0

for (var i = 2 ;i < 1000;i++){

if(i<2?false:!/^(11+?)\1+$/.test(Array(i+1).join('1'))&&i<=num){

arr.push(i)

}

}

return arr.reduce(function(sum,n){

return sum += n

},0)

}

1.4最小公倍数算法挑战(中级)

要求:找到所提供参数的最小公倍数,这两个参数可以均匀分配,以及这些参数之间范围内的所有最小公倍数。

注意:范围是两个数字构成的数组,两个数字不一定按数字顺序排序。

主要先了解最大公倍数和最小公约数的概念以及求法

function smallestCommons(arr) {

arr.sort(function(a,b){//先排序

return a-b

})

var n = arr[0]

var arr1 = []

var res

while(n<=arr[1]){//约数集合

arr1.push(n)

n++

}

function gcd( n,m ){

var qq = n*m //缓存两个数的乘积

function yue(n,m){

if( m == 0 ) return n; //辗转相除法

return yue( m, n % m );

}

return qq/yue(n,m)//最小公倍数=乘积/最大公约数

}

res = gcd(arr1[0],arr1[1] )//保留前面两个数的结果

for(var i = 2;i < arr1.length;i++){//操作整个范围所有的数

res = gcd(res,arr1[i])

}

return res

}

1.5数组平铺算法挑战

要求:对嵌套的数组进行平铺嵌套数组。你必须考虑到不同层级的嵌套。

这道题有点难度的,主要是处理{}和[],通过类型转换处理

function steamroller(arr) {

if (typeof arr[0] != 'number') {//全字母的情况(在这里只是全数字或者全字母,准确来说需要做更详细的判断)

return Array.apply(null,arr.join(',').split(','));

} else {

arr = arr.join().replace(/(,,)/g,',').split(',').map(function(n){//【】会转为两个逗号,,要去掉一个最后空数组平铺后就会不存在

return n*1;//转数字类型,+n也是一样

});

for (var i = 0;i

if(isNaN(+arr[i])){//如果是对象,对象转数字类型结果是NaN(+{}==NaN)

arr[i] = {}

}

}

}

return arr

}

1.6函数迭代可选参数算法挑战

要求:创建一个计算两个参数之和的 function。如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果。如果两个参数都不是有效的数字,则返回 undefined。

这题类似于柯里化

function add() {

var sum = 0

var arr = [...arguments]

if(!arr.every(function(i){

return typeof i ==='number'//如果两个参数都不是有效的数字

})){

return undefined

}

if(arguments.length != 1){//参数大于1个

arr.forEach(function(n){

sum+= n

})

return sum

}

sum = arguments[0]//一个参数的情况

return function(){

return typeof arguments[0] =='number'? sum += arguments[0]:undefined

}

}



原文来自lhyt的github

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

推荐阅读更多精彩内容