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

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

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

文章目录

    • 数组扁平化
      • 题目描述
      • 题解
    • 判断质数
      • 题目描述
      • 题解
    • 获取字符串的长度
      • 题目描述
      • 题解

数组扁平化

题目描述

请补全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码位值。

你可能感兴趣的:(javascript,开发语言,ecmascript,前端)