2016-04-29 13 views
0

for-inループを使用してオブジェクトを通過する関数を作成しています。数値(string、boolean )を単一の特定の文字列に変換して出力します。私は、for-inループの一般的な理解を助けてくれる既存の質問の束を経験してきました。関数を変更して新しい値を返す方法を理解しようとしています。これまで私が持っていたことは次のとおりです。関数を使用してfor-inループを実行し、値を変更してから結果を返す

var switcharoo = function(whateverObject){ 
    for (var i in whateverObject){ 
    if (whateverObject.hasOwnProperty(i)){ 
    alert(i + "redacted" + whateverObject[i]); 
    } 
    } 
return whateverObject; 
};  

私はこの機能のために設定したフレームワークを理解しています。私はfor-inループの構造を理解しています。私はまた、hasOwnProperty部分の重要性を理解しています。今私は失われている...

alert(i + "this is a string" + whateverObject[i]); 

行、私は周りに私の頭をラップすることはできません。私はここStackOverflowの質問からそれを得た。返すwhateverObject行は、結果を出力するための私のベストエフォートです。だから私はオブジェクトを実行し、すべての値を特定の文字列に変更する方法は?

ボーナスの質問:真偽値を検索して偽の値のみを削除するには、この機能を調整するにはどうすればよいですか?

+2

あなたは、オブジェクトのプロパティのいずれかに任意の文字列を代入されていません。私はObject.keys()を使うことをお勧めします。 – Redu

答えて

0

問題は、まったく何も変更していない...です:D

alertだけで値を表示し、それ以外は何もしません。

var switcharoo = function(whateverObject){ 
    for (var i in whateverObject){ 
    if (whateverObject.hasOwnProperty(i)){ 
     alert(i + "redacted" + whateverObject[i]); 

     // Assign value to this key in whateverObject 
     whateverObject[i] = 'redacted'; 

    } 
    } 
    return whateverObject; 
}; 

どのように私は真/偽の値を検索し、唯一の偽のものを削除するには、この機能を微調整するのでしょうか?

いくつかの高度なJavaScriptがあります。 Object.keysを使用すると、オブジェクトのキーの配列を取得できます。その配列を使用して、オブジェクト内のすべてのキーをループします。 reduceを使用して、false値を持たないキーのみを持つオブジェクトを構築することができます。

function switcharoo(object){ 
    return Object.keys(object).reduce(function(allTrue, key){ 
    if(object[key] !== false) allTrue[key] = object[key]; 
    return allTrue; 
    }, {}); 
} 
+0

あなたはあなたが作成したすべての規約(この例ではallTrue)を使用してオブジェクトの「キー」のすべてをレイクで削り取り、それらの規定を満たすものだけを使用しますか? – Kyle

+0

@Kyle 'reduce'は' forEach'と似ていますが、前回の反復の戻り値を得る点が異なります。この場合、初期値 '{} 'を' allTrue'として持ち越し、途中で偽でないキーと値のペアをそれぞれ追加します。最後の反復の戻り値は 'reduce'の戻り値になります。 – Joseph

+0

私はまだ、コードブロックの途中で新しい変数(つまりallTrue)を宣言できるという考えに慣れています。キーに値がない場合はfalseですか?キーの1つに値がなく、出力に含まれていないためにエラーが発生しています... – Kyle

0

別のアプローチ

var switcharoo = (o,s) => Object.keys(o).reduce((p,k) => {p[k] = s; return p},{}), 
 
     myObj = {a: 1, 
 
        b: _ => console.log(this.a), 
 
        c: {x: 3, 
 
         y: "hi there", 
 
         z: [1,2,3] 
 
        } 
 
       }; 
 
document.write("<pre>" + JSON.stringify(switcharoo(myObj, "stractassineboom"), null, 2) + "</pre>");

関連する問題