个人主页: 阿选不出来
个人简介: 大三学生,热爱Web前端,随机掉落学习碎片
目前开发的专栏: JS VueReact祝愿今天的你比昨天更加博识了!
请补全JavaScript代码,要求将数组参数中的多维数组扩展为一维数组并返回该数组。
注意:
递归
遍历数组 并 判断遍历的当前元素的数据类型,分为以下两种情况:
const _flatten = arr => {
return arr.reduce((target, item) => {
return target.concat(Array.isArray(item) ? _flatten(item) : item);
}, [])
}
其中参数 target为输出数组,item为遍历的当前元素
字符串法
a. 利用toString()
方法,将数组转为字符串,在使用split()
方法,以","
为分割变为数组。
b. 利用join()
方法将数组转为字符串且用","
分割,在利用上诉split()
方法以","
为分割变为数组。
const _flatten = arr => {
return arr.toString().split(",")
}
const _flatten = arr => {
return arr.join(",").split(",")
}
简单粗暴法
思路:
使用while循环检测数组,只要数组中存在元素的数据类型为数组,就利用扩展运算符将该元素的可遍历属性追加到输出数组中展开直到数组元素的数据类型均为数值为止。
const _flatten = arr => {
while(arr.some(item=>{Array.isArray(item)})){
arr = [].concat(...arr)
}
return arr
}
some() :测试数组中是否至少有一个元素通过了由提供的函数实现的测试,在本题中用于测试数组中是否存在元素的数据类型为数组。
扩展运算符(…):取出参数对象中的所有可遍历属性,拷贝到当前对象之中。在本题中扩展运算符(…)用于取出被检测到元素类型为数组的对象内的所有可遍历属性,并使用concat方法拷贝到输出数组中。
请补全JavaScript代码,要求在Number对象的原型对象上添加"_isPrime"函数,该函数判断调用的对象是否为一个质数,是则返回true,否则返回false。
质数的定义,不能被除了1和它本身的数字因式分解的数字,对应到数学的概念就是取余为0
双指针
Number.prototype._isPrime = function(){
let j=this-1;
for(let i=2; i<j;i++){
if(i>=j)break
if(!(this%i) || !(this%j)){
return false
}
j--
}
return true
}
平方根
假设Number数值为c, 若a * b = c 且(a<=b)则a,b需满足 a<=Math.sqrt©<=b,因此只用依次让[2,Math.sqrt©]范围内的数值对number进行取余数检验。
Number.prototype._isPrime = function(){
for(let i=2; i <= Math.sqrt(this); i++){
if(!(this%i)){
return false
}
}
return true
}
如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1
否则如果字符 Unicode 编码 > 255 则长度为 2
示例:
输入:
'hello world, 牛客', false
输出:
17
function strLength(s, bUnicode255For1) {
if(bUnicode255For1){
return s.length
}else{
let length = 0
for(let i=0; i<s.length; i++){
if(s[i].codePointAt() > 255){
length += 2
}else{
length += 1
}
}
return length
}
}
codePointAt(index)
作用:返回一个非负整数,该整数是从给定索引开始的字符的 Unicode 码位值。
参数:index