题目: 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。...示例 2: 输入: ["a","ab","abc","d","cd","bcd","abcd"] 输出: 4 解释: 这两个单词为 "ab", "cd"。...抛砖引玉 传入一个字符串数组,返回数组中两个不含相同字符的字符串元素长度乘积的最大值 思路 先暴力破解一下(暴力 API 工程师 ㄟ( ▔, ▔ )ㄏ ) 双循环枚举处两两不含相同字符的元素 保留枚举的符合要求元素长度的乘积...,includes 本地的时间复杂度应该是 O,那么 checkItem 函数的时间复杂度应该是 对传入的字符串重新处理,用二进制位来标记字符串每个字符: 英文字母编码从 97(a),那么我们就选对字符串所有字母减...一个字符串用一个二进制数表示,每个字符根据字符在二进制位中不同位置放置 1 占位,那么比较两个字符串是有相同字符只有对两个二进制数取按位或一定不等于 0 ab => ..000011 ac => ..0000101
// [11, 89] 上述代码中,cv的第4项是一个包含两项的数组,也就是说concat方法只能将传入数组中的每一项添加到数组中,如果传入数组中有些项是数组,那么也会把这一数组项当作一项添加到cv...这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1,在比较第一个参数与书中的每一项时,会使用全等操作符。...这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项,因此第一个参数是数组的第一项,第二个参数就是数组的第一项。...// 9 上面代码中,find方法的回调函数可以接受三个参数,以此为当前的值,当前的位置和原数组。...== -1) { } indexOf方法有两个缺点,一是不够语义化,它的含义是找到参数值的第一个出现位置,所以要去比较是否不等于-1,表达起来不够直观。
,注意filters函数第一个参数还是默认为变化的属性值,第二个参数开始才是对应传入的字符串参数。...,而本例中介绍的是控制是否显示directive,q-show和q-if,这两个directive的相同点是,都是根据属性的值或者经过filters处理后返回值的true or false来控制dom是否显示...directive,接受参数是数据对象中的数组属性,在dom遍历数组渲染页面的时候,当前namespace就会进入数组,就是比如要绑定数组内的name属性,只需q-text="name"即可,而不必q-text...是过滤器,对绑定的数据进行处理后返回,多个filter用| 分开,执行时会按顺序依次过滤 arguments 是过滤器的参数,跟filters之间用空格分开,多个参数也是用空格分开,目前只支持传入字符串作为参数...作为参数传给事件处理函数(目前事件处理函数只能传入2个参数,e 和 this),这里的this并不是外层的q对象,而是people数组中的每个对象。
数组的最后一项的索引 永远是 length -1,因此下一项的位置就是length。...() 删除数组的最后一项 a.pop() // [1,2] 2.3 队列方法 栈数据结构是遵循 先进后出 ,而队列数据结构的访问规则 是 先进先出。...规则: 默认创建当前数组的副本,然后将接受到的参数添加到这个副本的末尾,返回新建的数组 没有传递参数,就复制当前的数组并返回 传递了一个或多个数组,则将这些数组的每一项添加到结果数组中。...apply() 接受两个参数:一个是其运行函数的作用域,另一个是参数数组。 其中第二个参数可以是 Array 的实例也可以是 arguments对象。...let s = 'abc' a.charAt(1) // a charCodeAt() // 也是接受一个参数,但是返回的是字符串的编码 a.charCodeAt() // 97 2.
substr和substring这两个方法不同的地方就在于参数二,substr的参数二是截取返回出来的这个字符串指定的长度,substring的参数二是截取返回这个字符串的结束点,并且不包含这个结束点。...、endsWith,es6的新增方法,includes 用来检测目标字符串对象是否包含某个字符,返回一个布尔值,startsWith用来检测当前字符是否是目标字符串的起始部分,相对的endwith是用来检测是否是目标字符串的结尾部分...当我们需要判定数组中的元素是否满足某些条件时,可以使用every / some。这两个的区别是,every会去判断判断数组中的每一项,而 some则是当某一项满足条件时返回。...2.他们都可以接受第二个参数,用来绑定回调函数内部的 this 变量,将回调函数内部的 this 对象,指向第二个参数,间接操作这个参数(一般是数组)。...六:Object对象的两个遍历 Object.keys 与 Object.getOwnPropertyNames: 他们都是遍历对象的属性,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名
遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1","2"等是字符串 var foo = { name: 'bar',...当我们需要判定数组中的元素是否满足某些条件时,可以使用every/some。这两个的区别是,every会去判断判断数组中的每一项,而some则是当某一项满足条件时返回。...every/some方法详解 这两个方法类似“断言”(assert),返回一个布尔值,表示判断数组成员是否符合某种条件。 它们接受一个函数作为参数,所有数组成员依次执行该函数。...该函数接受以下四个参数。 累积变量,默认为数组的第一个成员 当前变量,默认为数组的第二个成员 当前位置(从0开始) 原数组 这四个参数之中,只有前两个是必须的,后两个则是可选的。...2.他们都可以接受第二个参数,用来绑定回调函数内部的this变量,将回调函数内部的this对象,指向第二个参数,间接操作这个参数(一般是数组)。
变为 接受一个参数返回一个函数的固定形式,这样便于再次调用,例如f(1)(2)经典面试题:实现add(1)(2)(3)(4)=10; 、 add(1)(1,2,3)(2)=9;function add...,一项一项地去遍历,如果每一项还是一个数组,那么就继续往下遍历,利用递归程序的方法,来实现数组的每一项的连接:let arr = [1, [2, [3, 4, 5]]];function flatten...2, 3, 4,5](2)reduce 函数迭代从上面普通的递归函数中可以看出,其实就是对数组的每一项进行处理,那么其实也可以用reduce 来实现数组的拼接,从而简化第一种方法的代码,改造后的代码如下所示...().split(',');}console.log(flatten(arr)); // [1, 2, 3, 4,5]通过这两个方法可以将多维数组直接转换成逗号连接的字符串,然后再重新分隔成数组。...(2)(3)函数柯里化概念: 柯里化(Currying)是把接受多个参数的函数转变为接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。支持第二个参数,表示开始搜索的位置。 endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。...它也是一个数组,成员与处理函数的第一个参数完全一致,唯一的区别是字符串是被转义前的原始格式。...Array.from()还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理。...Symbol函数可以接受一个字符串作为参数,表示Symbol实例的名称。...Set内部判断两个值是否不同,使用的算法类似于精确相等运算符(===),唯一的例外是NaN等于自身。这意味着,两个对象总是不相等的。
书到用时方恨少啊 于是2022年的规划又多了一项:多看书 不积跬步无以至千里 不积小流无以成江海 只记录对我来说比较陌生的知识点 文章内容来自: https://es6.ruanyifeng.com...2:对象的解构赋值 对象的属性没有次序,变量必须与属性同名,才能取到正确的值 如果变量名与属性名不一致,必须写成下面这样。...// 参数是一组有次序的值 function f([x, y, z]) { ... } f([1, 2, 3]); // 参数是一组无次序的值 function f({x, y, z}) { ......includes():返回布尔值,表示是否找到了参数字符串。 startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。...,padStart()和padEnd()一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
2、join() 把所有的数组元素依照分隔符(也就是参数)链接成一个字符串。如果不传入参数则以”,”逗号分隔。该方法同样会生成一个新的字符串结果。...forEach(): forEach()方法,它接受一个方法(function)作为参数,该方法中可以有三个参数(item,index,arr)分别是调用forEach数组中的每一项元素,每一项元素的下标...简单说就是,你(调用filter方法的数组中每一个元素)是否能通过我(filter的function方法)的判定,如果可以就会成为我(返回的新数组)的一员。...那么再说,如果搜索的参数在数组中并不存在,那么则返回-1,两个方法都是一样的。 ...而且我们还可以从上面的简单测试代码中发现,这两个方法的参数只适用于基本类型,如果对数组中的引用类型元素进行索引查找是不可以也通常是不会应用的!
2、join() 把所有的数组元素依照分隔符(也就是参数)链接成一个字符串。如果不传入参数则以","逗号分隔。该方法同样会生成一个新的字符串结果。...forEach(): forEach()方法,它接受一个方法(function)作为参数,该方法中可以有三个参数(item,index,arr)分别是调用forEach数组中的每一项元素,每一项元素的下标...简单说就是,你(调用filter方法的数组中每一个元素)是否能通过我(filter的function方法)的判定,如果可以就会成为我(返回的新数组)的一员。...那么再说,如果搜索的参数在数组中并不存在,那么则返回-1,两个方法都是一样的。 ...而且我们还可以从上面的简单测试代码中发现,这两个方法的参数只适用于基本类型,如果对数组中的引用类型元素进行索引查找是不可以也通常是不会应用的!
大家好,又见面了,我是你们的朋友全栈君。...上述代码中,arrCopy2数组的第五项是一个包含两项的数组,也就是说concat方法只能将传入数组中的每一项添加到数组中,如果传入数组中有些项是数组,那么也会把这一数组项当作一项添加到arrCopy2...slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。...arrCopy2设置了两个参数,返回起始下标(包括1)开始到终止下标(不包括4)的子数组。...这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数是数组的第二项。
我相信你在学习时一定见到过Array类型,也是最常见的,数组的每一项可以存储任何类型的数据,数组的大小是可以动态变动的,数组的长度越大就可以存储更多的数据。 那么第一问,数组是怎么创建的呢?...字符串变化为数组 string.split(第一个参数为字符串或者是正则表达式,从该参数指定的地方对字符串进行分割,第二个参数为指定返回的数组的最大长度)用于把一个字符串分割成字符串数组 数组的截取与合并...i表示不区分大小写模式 m表示多行模式 RegExp 构造函数接收两个参数: 一个是要匹配的字符串模式,一个是可选的标志字符串。 ...apply()与call()方法 两个方法的作用都是在特定的作用域中调用函数 实际上就是设置函数内部的this值 apply():接收两个参数 一个是函数运行的作用域, 一个是参数数组,可以是数组,也可以是...toString()方法 将Number数值转换为字符串,该方法接受一个可选参数基数,告诉它返回几进制数值的字符串形式,若省略,则默认基数为10,即十进制。
pop()方法返回被删除的项3,原始数组变成了[1, 2]。 需要注意的是,pop()方法不仅会删除最后一项,还会更改数组的长度值。...我们可以看到,slice()方法不会修改原始数组,并且可以接受两个可选的参数,用于指定开始和结束提取的索引位置。 注意:如果只传入一个参数,则提取从该索引开始到数组末尾的所有元素。...它接受两个参数,第一个参数表示目标长度,第二个参数表示用于填充字符串的字符,默认为空格。...它接受两个参数,第一个参数表示目标长度,第二个参数表示用于填充字符串的字符,默认为空格。...includes()方法用于判断字符串是否包含指定的子字符串。它接受一个字符串参数,用于指定要搜索的子字符串。如果原始字符串包含该子字符串,则返回true,否则返回false。
https://juejin.cn/post/6907109642917117965 数组是 js 中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响...slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。 在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。...参数有两个,其中第一个是(必填)需要查找的元素值,第二个是(可选)开始查找元素的位置 const array1 = [22, 3, 31, 12, arr ]; const includes = array1...()和 findIndex() find()与 findIndex()方法均接受两个参数:一个回调函数,一个可选值用于指定回调函数内部的 this。...该回调函数可接受三个参数:数组的某个元素,该元素对应的索引位置,以及该数组本身。
都不存在返回 undefined 常用方法 检测数组 由于在多个全局环境中存在构造函数不一样的问题,而instanceof假定为一个全局环境 使用**Array.isArray()**判断一个对象是否是数组...先进先出,JS提供了两个方法 **shift()**移出数组的第一项,长度减一并返回该值 **unshift()**向数组前端添加任意个项并返回改变后数组的长度 var a = new Array(1,2,3...sort() 默认升序排序,将值当做字符串来比较,即使数值也是这样,但是数值的排序可能会出现上述那种情况所以 sort() 提供了自定义的比较函数 比较函数中接受两个参数,这两个参数一般是要比较数组中的两个值...console.log(b);//[1, 2] console.log(c);//[2, 4, 5] **splice()**方法 两个参数,参数1指定起始位置,参数2指定删除项数,返回原数组中删除的项...(d);//[1] 位置方法 查找指定项,并返回相应的数组下标,接受两个参数,参数1为要查找的项,参数2代表从哪个下标开始 indexOf() 从头开始 lastIndexOf() 从尾部往前找
语法如下: reduce(callback(accumulator, currentValue[, index, array])[,initialValue]) 复制代码 reduce 接受两个参数,回调函数和初识值...回调函数接受4个参数:积累值、当前值、当前下标、当前数组。...如果 reduce的参数只有一个,那么积累值一开始是数组中第一个值,如果reduce的参数有两个,那么积累值一开始是出入的 initialValue 初始值。...在这里我们使用 map 来遍历数组中的每一项,我们对所有的数组进行还原,并将数组还原成一个字符串。...~完,我是刷碗智,励志等退休后,要回家摆地摊的人,我们下期见!
第一题:下面代码输出的结果是什么 ["1", "2", "3"].map(parseInt) 答案: [1, NaN, NaN] 。 解析: 首先说说 parseInt 这个方法,他接收两个参数。...第一个是要处理的字符串,第二个参数是转换的进制 radix ,取值是 2-36 的整数。10不是默认值,不同浏览器实现可能不同,虽然大部分浏览器都是将10作为默认值。...其次是数组的 map 方法,接受一个函数作为参数,这个参数函数接收三个参数:每一项的值、索引,数组本身。...这里传入一个 parseInt 相当于是 parseInt 的第一个参数是数组的每一项,第二个参数是这一项的索引值。...所以,这是按照二进制来处理的,字符串 123 的第一项是小于 2 的,后面两项都是大于 2 的,所以直接忽略,相当于是求 parseInt('1', 2) 的值。
而与前两个方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项的toLocaleString()方法,而不是toString()方法。...slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。...Date.UTC()的参数分别是年份、基于0的月份(一月是0,二月是1,以此类推)。月中的哪一天(1到31)、小时数(0到23)、分钟、秒以及毫秒数。在这些参数中,只有前两个参数(年和月)是必需的。...这两个方法的用途是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。首先,apply()方法接受两个参数:一个是在其中运行函数的作用域,另一个是参数数组。...eval()方法 eval()方法大概是JavaScript中最强大的一个方法了,eval()方法就像是一个完整的JavaScript解析器,它只接受一个参数,即要执行的字符串。
领取专属 10元无门槛券
手把手带您无忧上云