2017-12-27 55 views
-1

私はJavascriptでapplyメソッドを理解していません。私が理解したところでは、適用の最初のパラメータはキーワードの望ましい値になり、追加のパラメータは適用された借用関数に適用されます。私はまだこれがどのようにボンネットの下に方法を適用するか分からない。どのように結果は[1、2、3、4、5、6、7、8]フードの下で 'apply'メソッドはどのように実行されますか?

var flattenedArray = [[1,2],[3,4,5,6], 7, 8] 
[].concat.apply([],flattenedArray) 

ことができる誰もが、それは実際にこののscenerioにどのように動作するか私を助けてくださいでした。ありがとう

+1

すべての関数には、コンテキストが添付されています。これは '[[methodName、context、args]]'として表されます。この 'context'を置き換えようとしています – Rajesh

+0

' apply'は引数を配列としてとり、 'flattenedArray'は完全一致になります。 – gurvinder372

答えて

0

結果[1, 2, 3, 4, 5, 6, 7, 8]はの値ではなく、Array#concatです。

applyは、の明示的にバインドされたコンテキストの関数を呼び出し、オプションで配列としてパラメータを受け取り、関数に渡します。

、関数apply[[1,2],[3,4,5,6], 7, 8]を渡すときに(インナーアイテムを保持し、外側に配列されており、applyの2番目のパラメータのタイプであると考えられ、なぜそれがインナーアイテムを取得されたインナーアイテムを取得1つ1つを省略して外側の配列を省略します)。これは、関数concatに[1,2][3,4,5,6]7および8です。

例を参照してください。以下の2つのコールはconcatと同じです。

const flattenedArray = [[1,2],[3,4,5,6], 7, 8]; 
 

 
const first = [].concat.apply([],flattenedArray); 
 
console.log(first); 
 

 
const second = [].concat([1,2], [3,4,5,6], 7, 8); 
 
console.log(second);

+0

あなたの投稿から、そして私が "apply"メソッドについて理解したことは、組み込みメソッド[] .concatを借用して外部配列の要素を連結することでした。 (この場合、内側要素([1,2]、[3、4、5,6]、7,8)を保持する外側)。ありがとう –

+0

@AnNiceはい、あなたは正しいです –

0
var flattenedArray = [[1,2],[3,4,5,6], 7, 8] 
[].concat.apply([],flattenedArray) 

     // [].concat.apply([],flattenedArray) 
 
var concat = [].concat // ^^^^^^^^^ 
 
var me = []    //     ^^ 
 

 
         // [[1,2],[3,4,5,6], 7, 8] 
 
var arg0 = [1,2]  // ^^^^^ 
 
var arg1 = [3,4,5,6] //  ^^^^^^^^^ 
 
var arg2 = 7   //     ^
 
var arg3 = 8   //     ^
 

 
me.concat = concat 
 
var res = me.concat(arg0, arg1, arg2, arg3) 
 
delete me.concat 
 

 
console.log(res)

function concat(...args) { 
 
    var res = [] 
 
    
 
    for (var x of this) { 
 
    res.push(x) 
 
    } 
 
    
 
    for (var arg of args) { 
 
    if (arg instanceof Array) { 
 
     for (var x of arg) { 
 
     res.push(x) 
 
     } 
 
    } else { 
 
     res.push(arg) 
 
    } 
 
    } 
 
    
 
    return res 
 
} 
 

 
console.log(concat.apply([], [[1,2], [3,4,5,6], 7, 8]))

関連する問題