問題21.如何在JavaScript中清空數組?
答:
有四種方法可以在JavaScript中清空數組
通過配置設定一個空數組:
var array1 = [1, 22, 24, 46];
array1 = [ ];
通過将數組長度配置設定為0:
array1.length=0;
通過彈出數組的元素:
while(array1.length > 0) {
array1.pop();
}
通過使用拼接數組函數:
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
實作是
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可以使用它。