2016-04-25 9 views
0

Array.fromから非常に奇妙な動作が検出されました。配列のようなオブジェクトの配列にマップされたときには、コールバック関数として直接動作しないようです。私はChromeでテストしました。Array.fromがArray#mapのダイレクトコールバック関数として機能しない

ここではいくつかのテストコード(ES6)です:

const fails =() => { 
    const x = { 
    0: 'help', 
    length: 1 
    }; 

    const y = [x].map(Array.from); // will throw an Error 
    return y; 
}; 

const works =() => { 
    const x = { 
    0: 'help', 
    length: 1 
    }; 

    const y = [x].map(item => Array.from(item)); // will work 
    return y; 
}; 

console.log(works()); 
console.log(fails()); 

https://jsfiddle.net/dox6wnya/

は、これは非常に特異な動作です。私はなぜこれが起こるか疑問に思っています。

答えて

4

.mapは、そのコールバック(currentValueindexarray)に引数を渡し、そして.from 3つの引数(arrayLikemapFnthisArg)を受け付けます。引数の型が一致せず予期しない結果が生じる。具体的には「0 is not a function」であり、0indexの引数で、mapFnに渡されます。実際に互換性のある唯一の議論は、最初のものです。それがあなたが渡すべき唯一の理由です。

+0

[Array.map'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)に2つの引数しか表示されないのはなぜですか? – Jamiec

+0

'map' ***は、2つの引数をとりますが、***は、3つの引数を' callback'に渡します。もちろん、 – deceze

+0

。私は今あなたが書いたことを理解する。 – Jamiec

関連する問題