天天看點

牛客JavaScript算法題 - 将數組 arr中的元素作為調用函數 fn的參數

題目描述

将數組

arr

中的元素作為調用函數

fn

的參數

示例

輸入

function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!']
           

輸出

Hello, Ellie!
           

1. 調用函數的方法

詳細的可參照

JavaScript

教程JavaScript函數調用

這裡介紹其中的一種

作為函數方法調用函數

call()

apply()

都是用來改變函數内部

this

指向的,但是也可以調用函數

  1. call()

執行個體

function myFunction(a, b) {
    return a * b;
}
myObject = myFunction.call(myObject, 10, 2);     // 傳回 20
           
  1. apply()

執行個體

function myFunction(a, b) {
    return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray);  // 傳回 20
           

差別:

  • call

    的參數是直接放進去的,第二第三第 n 個參數全都用逗号分隔,直接放到後面。
  • apply

    的所有參數都必須放在一個數組裡面傳進去 。

2. 本題解決方法

  • call()

function argsAsArray(fn, arr) {
    return fn.call(this,...arr);
}

//let arr = [1, 2, 3];
 //...arr -> 1, 2, 3
           

注:

...

是擴充運算符,可以将數組或者對象轉為用逗号分隔的參數序列

  • apply()

function argsAsArray(fn, arr) {
    return fn.call(this,arr);
}
           

繼續閱讀