js数组的方法中,哪个方法不能改变自身数组牛客网

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js数组的方法中,哪个方法不能改变自身数组牛客网相关的知识,希望对你有一定的参考价值。

var arr = [1,2,3];
arr.pop();// [1,2] 改变
arr.push(3);// [1,2,3] 改变
arr.splice(0,1);// [2,3] 改变
arr.concat([4,5]);// [2,3] 返回新数组,不改变原数组
arr.slice(0,1);// [2,3] 返回新数组,不改变原数组

参考技术A arr.slice(0,1);// [1]
这个应该是返回[1], 该方法接受一或两个参数,即要返回项的起始和结束位置,如果只传入一个参数,那么返回的是从起始位置,一直到最后一项(包含最后一项)。

js牛客网编程练习汇总

1、请补全JavaScript代码,要求根据下拉框选中的条件变换重新渲染列表中展示的商品,且只展示符合条件的商品。

            注意:1. 必须使用DOM0级标准事件(onchange)

                       2. 建议使用ES6的filter方法

<!DOCTYPE html>
<html lang="en">

<head>
      <meta charset="UTF-8">
</head>

<body>
      <select name="" id="">
            <option value="0">请选择销量范围</option>
            <option value="1">&lt100</option>
            <option value="2">100~500</option>
            <option value="3">&gt500</option>
      </select>
      <ul>
            <li>牛客logo马克杯</li>
            <li>无盖星空杯</li>
            <li>老式茶杯</li>
            <li>欧式印花杯</li>
      </ul>

      <script>
            var cups = [
                        type: 1,
                        price: 100,
                        color: 'black',
                        sales: 60,
                        name: '牛客logo马克杯'
                  ,
                  
                        type: 2,
                        price: 40,
                        color: 'blue',
                        sales: 100,
                        name: '无盖星空杯'
                  ,
                  
                        type: 4,
                        price: 60,
                        color: 'green',
                        sales: 200,
                        name: '老式茶杯'
                  ,
                  
                        type: 3,
                        price: 50,
                        color: 'green',
                        sales: 600,
                        name: '欧式印花杯'
                  
            ]
            var select = document.querySelector('select');
            var ul = document.querySelector('ul');
            // 补全代码
            /**
             * 请补全JavaScript代码,要求根据下拉框选中的条件变换重新渲染列表中展示的商品,且只展示符合条件的商品。
            注意:
            1. 必须使用DOM0级标准事件(onchange)
            2. 建议使用ES6的filter方法
            */
            select.onchange = function (e) 
                  ul.innerHTML = ''
                  switch (parseInt(this.value)) 
                        case 1:
                              var newArr = cups.filter((item) => 
                                    return item.sales < 100
                              )
                              break
                        case 2:
                              var newArr = cups.filter((item) => 
                                    return item.sales >= 100 && item.sales <= 500
                              )
                              break
                        case 3:
                              var newArr = cups.filter((item) => 
                                    return item.sales > 500
                              )
                              break
                  
                  showContent(newArr)
            

            function showContent(arr) 
                  var str = ''
                  arr.forEach(item => 
                        str += `<li>$item.name</li>`
                  );
                  ul.innerHTML = str
            
      </script>
</body>

</html>

2、请补全JavaScript代码,要求在Number对象的原型对象上添加"_isPrime"函数,该函数判断调用的对象是否为一个质数,是则返回true,否则返回false。

      <script type="text/javascript">
            // 补全代码
            /**
             * 请补全JavaScript代码,要求在Number对象的原型对象上添加"_isPrime"函数,
             * 该函数判断调用的对象是否为一个质数,是则返回true,否则返回false。
             */
            // 质数:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
            Number.prototype._isPrime = function (num) 
                  if (num < 2) return false
                  for (var i = 2; i < num; i++) 
                        if (num % i === 0) 
                              return false
                        
                  
                  return true
            
      </script>

3、请补全JavaScript代码,要求以Boolean的形式返回字符串参数是否符合身份证标准。

注意:1. 无需考虑地区信息、出生日期、顺序码与校验码的验证

      <script>
            /**
             * 请补全JavaScript代码,要求以Boolean的形式返回字符串参数是否符合身份证标准。
            注意:
            1. 无需考虑地区信息、出生日期、顺序码与校验码的验证
            */
            // 41088219980825152X
            /**
             * 分析身份证分为一代和二代
             * (1)一代15位,可以是15位数字(^\\d15$):\\d 数字字符等同于0-9,15代表15位
             * (2)二代18位,可以是15位数字(^\\d18$):\\d 数字字符等同于0-9,18代表15位
             * (3)身份证最后一位可能是''x'|'X'',(^\\d17(\\d|X|x)$
             */
            const _isCard = number => 
                  var regx = /(^\\d15$)|(^\\d18$)|(^\\d17(\\d|X|x)$)/
                  return regx.test(number)
            
      </script>

4、请补全JavaScript代码,要求以键/值对的对象形式返回参数数组。要求如下:

         1. 键名的数据类型为Symbol

         2. 键值为当前数组项

         3. Symbol的描述为当前数组项

         4. 返回普通对象

            const _symbolKey = array => 
                  // 补全代码
                  let obj = new Object()
                  array.forEach(aa => 
                        obj[Symbol(aa)] = aa
                  );
                  return obj
            

5、请补全JavaScript代码,要求以boolean的形式返回两个Set对象参数是否一样,是则返回true,否则返回false。

      <script>
            /**
             * 请补全JavaScript代码,
             * 要求以boolean的形式返回两个Set对象参数是否一样,是则返回true,否则返回false
             */
            const _isSameSet = (s1, s2) => 
                  // 补全代码
                  if (s1.size !== s2.size) 
                        return false
                  
                  return [...s1].every(i => s2.has(i))
            
            const letters = new Set();
            const letters1 = new Set();
            letters.add('a');
            letters.add('b');
            letters.add('c');
            letters1.add(0)
            letters1.add('d')
            letters1.add('f')
            console.log(_isSameSet(letters, letters1))
      </script>

 知识点补充:

new Set()创建新的 Set 对象。
add()向 Set 添加新元素。
clear()从 Set 中删除所有元素。
delete()删除由其值指定的元素。
entries()返回 Set 对象中值的数组。
has()如果值存在则返回 true。
forEach()为每个元素调用回调。
keys()返回 Set 对象中值的数组。
values()与 keys() 相同。
size返回元素计数。

 6、请补全JavaScript代码,完成名为"Rectangle"的矩形类。要求如下:
        1. 构造函数只包含两个参数,依次为"height"、"width"
        2. 设置Getter,当获取该对象的"area"属性时,返回该对象"height"与"width"属性的乘积

这里涉及到了class类的知识点,可以参考以下详细讲解文章:

ES6--class类(详解/看完必会)_class类详解_suoh's Blog的博客-CSDN博客

<script type="text/javascript">
      /**
       * 请补全JavaScript代码,完成名为"Rectangle"的矩形类。要求如下:
      1. 构造函数只包含两个参数,依次为"height"、"width"
      2. 设置Getter,当获取该对象的"area"属性时,返回该对象"height"与"width"属性的乘积
      */
      class Rectangle 
            // 补全代码
            constructor(height, width) 
                  this.height = height
                  this.width = width
            
            get area() 
                  return this.calcArea()
            
            calcArea() 
                  return this.height * this.width
            
      
      var area = new Rectangle(12, 12).area
      console.log(area)
</script>

 7、请补全代码,要求当滑动id为"range"的滑块控件时可以改变id为"rect"的矩形旋转速度。要求如下:
        1. id为"rect"的矩形初始动画周期为10秒
        2. id为"range"的滑块控件默认值为1、最小值为、最大值为10、滑动间隔为1
        3. 当滑动滑块值为1时,矩形动画周期为10秒、当...,为...、当滑动滑块值为10时,矩形动画周期为1秒
注意:
1. 必须使用DOM0级标准事件(onchange)

<!DOCTYPE html>
<html>

<head>
      <meta charset=utf-8>
      <style type="text/css">
            #rect 
                  width: 120px;
                  height: 100px;
                  background-color: black;
                  /*补全代码*/
                  animation: rect 10s linear infinite;
            

            @keyframes rect 
                  from 
                        transform: rotate(0deg);
                  

                  to 
                        transform: rotate(360deg);
                  
            
      </style>
</head>

<body>
      <!-- 补全代码 -->
      <div id="rect"></div>
      <input id="range" type="range" step="1" defaultValue="1" value="5" min="1" max="10" />

      <script type="text/javascript">
            // 补全代码
            document.querySelector('#range').onchange = function () 
                  let speed = document.querySelector('#range').value
                  document.querySelector('#rect').style.animationDuration = 11 - speed + 's'
            
      </script>
</body>

</html>

知识点: 

input框的type类型为range,就是一个进度条展示,可能平时用的少,今天拓展一下

<input id="range" type="range" step="1" defaultValue="1" value="5" min="1" max="10" />

 动画属性:

animation: name duration timing-function delay iteration-count direction;
animation-name规定需要绑定到选择器的 keyframe 名称。
animation-duration规定完成动画所花费的时间,以秒或毫秒计。
animation-timing-function

规定动画的速度曲线。

animation-delay规定在动画开始之前的延迟。
animation-iteration-count规定动画应该播放的次数。
animation-direction规定是否应该轮流反向播放动画。
animation-fill-mode规定动画在执行时间之外应用的值。
animation-play-state规定动画是正在运行还是暂停。

 8、根据题目要求,将页面中的“p”标签DOM节点保存在Map对象的键名中,其内容保存在键值中,核心步骤有:

  1. 通过document.querySelector获取页面中“p”元素标签
  2. 初始化Map实例保存“p”标签DOM节点和内容
<body>
      <p>1</p>
      <script type="text/javascript">
            /**
             * 请补全JavaScript代码,要求将页面中的"p"标签以键名的形式保存在Map对象中,
             * 键名所对应的键值为该"p"标签的文字内容。
             */
            const _elementKey = () => 
                  // 补全代码
                  let p = document.querySelector('p')
                  return new Map([
                        [p, p.innerText]
                  ])
            
            console.log(_elementKey())
      </script>
</body>

以上是关于js数组的方法中,哪个方法不能改变自身数组牛客网的主要内容,如果未能解决你的问题,请参考以下文章

java语言复制数组的四种方法

牛客网——二维数组的查找

2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网

js能力测试题21--42-牛客网

牛客网:连续子数组的最大和(动态递归解法)

牛客网编程练习之游戏任务标记