2017-08-03 8 views
0

オブジェクトのプロパティ+値が配列の場合はその値を削除する関数を作成しました。私は友人の溶液からこれを得たオブジェクトプロトタイプtoString呼び出し - JavaScript

Object.prototype.toString.call(obj[key]) 

しかし、それはそれは本当にやっている私にははっきりしていない:

function removeArrayValues(obj) { 
    for(var key in obj){ 
    if(Object.prototype.toString.call(obj[key]) === '[object Array]') { 
    delete obj[key]; 
    } 
    } 
} 

お知らせこの部分:ここではそれがどのように見えるかです。また、'Array'の代わりに[]に入れて[object Array]とする必要があります。

また、この解決方法以外にこれを行うには良い方法はありますか?

私はJavaScriptの絶対初心者です。

誰でも私に教えることができますか?

誰でも?

答えて

2

javascriptでは、各ビルトインタイプに独自のtoStringメソッドがあります。アレイのために、それは、カンマで配列値のすべてに参加し返す例:

const arr = [1,2,3,4,5] 
arr.toString() // returns "1,2,3,4,5" 

オブジェクトのtoString機能(組み込みオブジェクトの種類)があるように、オブジェクトの種類を返すたまたま形式は[オブジェクトの種類]の文字列です。したがって、たとえば:

const arr = [1,2,3,4,5] 
Object.prototype.toString.call(arr) // returns "[object Array]" 

const str = 'test' 
str.toString() // returns 'test' 
Object.prototype.toString.call(str) // returns "[object String]" 

したがって、それが配列かどうかを知りたい場合は、それを見つける方法の1つです。 toStringメソッドは、オブジェクトのプロトタイプに存在します。 callは、別の関数のコンテキストを変更できる関数です。 [].toString()に電話すると、Array.prototypeでtoStringメソッドが実行されます。 Object.prototype.toString(つまり[オブジェクトタイプ])の振る舞いが必要な場合は、その関数を使用して、オブジェクトではなく値として配列を呼び出すことができます。

IE 8について気にしない場合、より良い方法は、Array.isArrayを使用することです。たとえば、あなたの関数で:

function removeArrayValues(obj) { 
    for (var key in obj) { 
    if (Array.isArray(obj[key])) delete obj[key] 
    } 
} 
+0

これは最適な説明です。私は下落した質問の数を理解していません。どのような理由でこの答えが下落していますか? – PeterMader

+0

何人かのユーザーが、明白な理由なしにすべてを通ってきてダウンしました。 – shadymoses

0

Object.prototype.toString.call(obj[key])実際にそうArrayにそれを比較すると、あなたがanから得た配列をチェックしている場合、一致

typeofはあなたに虚偽を与えることができ返しません文字列[object Array]を返します。したがって、タイプを確認するこの方法は、より信頼性が高い。

ここには素晴らしい記事があります:https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/

関連する問題