【JavaScript】JS能力测试题:数组扁平化 | 判断质数 | 获取字符串的长度

💎个人主页: 阿选不出来
💎个人简介: 大三学生,热爱Web前端,随机掉落学习碎片
💎目前开发的专栏: JS 🍭Vue🍭React🍭

💎祝愿今天的你比昨天更加博识了!

数组扁平化

题目描述

请补全JavaScript代码,要求将数组参数中的多维数组扩展为一维数组并返回该数组。
注意:

  1. 数组参数中仅包含数组类型和数字类型

题解

递归

遍历数组 并 判断遍历的当前元素的数据类型,分为以下两种情况:

  1. 类型为数值:添加该元素到输出数组中。
  2. 类型为数组:重复上诉操作。
  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

  • 字符串的索引,返回指定字符的Unicode码位值。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿选不出来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值