100个最常问的JavaScript面试问答-第3部分(共10部分)

简介: 100个最常问的JavaScript面试问答-第3部分(共10部分)

问题21.如何在JavaScript中清空数组?


答:


有四种方法可以在JavaScript中清空数组

通过分配一个空数组:

var array1 = [1, 22, 24, 46];

array1 = [ ];


通过将数组长度分配为0:

var array1 = [1, 22, 24, 46];

array1.length=0;


通过弹出数组的元素:

var array1 = [1, 22, 24, 46];

while(array1.length > 0) {

array1.pop();

}


通过使用拼接数组函数:

var array1 = [1, 22, 24, 46];

array1.splice(0, array1.length)


问题22.如何从数组中删除重复项?


答:


有多种方法可以从数组中删除重复项,但让我告诉您一种最流行的方法。

使用过滤器-通过对JavaScript数组应用过滤器,可以从其中删除重复项。要调用该filter()方法,需要三个参数。它们分别是数组self,当前元素elem和当前元素的索引index。

let language = ['JavaScript', 'Dart', 'Kotlin', 'Java', 'Swift', 'Dart']
function unique_array(arr) {
   let unique_array = arr.filter(function (elem, index, self) {
       return index == self.indexOf(elem);
   });
   return unique_array
}
console.log(unique_array(language));
// Logs [ 'JavaScript', 'Dart', 'Kotlin', 'Java', 'Swift' ]


问题23.如何检查值是否为数组?


答:


我们可以使用Array全局对象中可用的Array.isArray()方法来检查值是否为Array。

当传递给它的参数是数组时,它返回true,否则返回false。

console.log(Array.isArray(5));  //logs false

console.log(Array.isArray("")); //logs false

console.log(Array.isArray()); //logs false

console.log(Array.isArray(null)); //logs false

console.log(Array.isArray({ length: 5 })); //logs false

console.log(Array.isArray([])); //logs true


如果您的环境不支持此方法,则可以使用polyfill实现。

function isArray(value){

  return Object.prototype.toString.call(value) === "[object Array]"

}


问题24.如何实施Array.prototype.map()方法


答:


作为Array.prototype.map方法的MDN描述,该map()方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

map()方法的语法是

let newArray = arr.map(callback(currentValue[, index[, array]]) {

 // return element for newArray, after executing something

}[, thisArg]);


这是它的实现

function map(arr, mapCallback) {
  // Check if the parameters passed are right.
  if (!Array.isArray(arr) || !arr.length || typeof mapCallback !== 'function') {
    return [];
    }
    else {
      let result = [];
      // Avoid mutating the original array.
      for (let i = 0, len = arr.length; i < len; i++) {
        result.push(mapCallback(arr[i], i, arr));
        // push the result of the mapCallback in the 'result' array
        }
        return result; // return the result array
    }
}


问题25.如何实现Array.prototype.filter()方法


答:


作为Array.prototype.filter方法的MDN描述,该filter()方法将创建一个新数组,其中包含所有通过通过所提供函数实现的测试的元素。

语法是

let newArray = arr.filter(callback(currentValue[, index[, array]]) {

 // return element for newArray, if true

}[, thisArg]);


实现是

function filter(arr, filterCallback) {
  // Check if the parameters passed are right.
  if (!Array.isArray(arr) || !arr.length || typeof filterCallback !== 'function') {
    return [];
    }
    else {
      let result = [];
      // Avoid mutating the original array.
      for (let i = 0, len = arr.length; i < len; i++) {
        // check if the return value of the filterCallback is true or "truthy"
        if (filterCallback(arr[i], i, arr)) {
        // push the current item in the 'result' array if the condition is true
        result.push(arr[i]);
      }
    }
    return result; // return the result array
  }
}


问题26.如何实现Array.prototype.reduce()方法


答:


该reduce()方法在数组的每个元素上执行reducer函数(由您提供),从而产生单个输出值。

reducer函数采用四个参数:

累加器,当前值,当前索引,源数组

语法是

arr.reduce(callback( accumulator, currentValue, [, index[, array]] )[, initialValue])


执行

function reduce(arr, reduceCallback, initialValue) {
  // Check if the parameters passed are right.
  if (!Array.isArray(arr) || !arr.length || typeof reduceCallback !== 'function'){
    return [];
  }
  else {
    // If no initialValue has been passed to the function we're gonna use the
    let hasInitialValue = initialValue !== undefined;
    let value = hasInitialValue ? initialValue : arr[0];
    // first array item as the initialValue, Start looping at index 1 if there is no
    // initialValue has been passed to the function else we start at 0 if there is an initialValue.
    for (let i = hasInitialValue ? 0 : 1, len = arr.length; i < len; i++) {
      // Then for every iteration we assign the result of the reduceCallback to the variable value.
      value = reduceCallback(value, arr[i], i, arr);
    }
    return value;
  }
}


问题27.JavaScript中的名称函数是什么?


答:


命名函数在定义后便立即声明名称。可以使用function关键字将其定义为:

function named() {
   // write code here
}


问题28.可以将匿名函数分配给变量并将其作为参数传递给另一个函数吗?


答:


是的!可以将匿名函数分配给变量。

也可以将其作为参数传递给另一个函数。

例子是


let show = function () {
  console.log('Anonymous function');
};
show();


问题29.什么是arguments object(参数对象)?


答:


参数对象是函数中传递的参数值的集合。

这是一个类似Array的对象,因为它具有length属性,我们可以使用数组索引符号参数[1]访问各个值

但它在数组中没有内置方法来进行每个,化简,过滤和映射。

它有助于我们了解函数中传递的参数数量。

问题30.可以将参数对象转换为数组吗?


答:


是的,我们可以使用Array.prototype.slice将arguments对象转换为数组。

function one() {
   return Array.prototype.slice.call(arguments);
}


但是,如果需要automatically在给出函数的地方执行某个函数,而不必再次调用它,则anonymous functions可以使用它。


目录
相关文章
|
2月前
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
53 3
|
2月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
3月前
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
61 3
|
18天前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
29 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
1月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
3月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
39 0
|
3月前
|
存储 缓存 JavaScript
10 个简单但不能不会的 Vue 面试问答
10 个简单但不能不会的 Vue 面试问答
|
3月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
93 4
|
3月前
|
机器学习/深度学习 算法 Python
【机器学习】面试问答:决策树如何进行剪枝?剪枝的方法有哪些?
文章讨论了决策树的剪枝技术,包括预剪枝和后剪枝的概念、方法以及各自的优缺点。
59 2
|
3月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码