0

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 に関する質問から入手しました。return whatObject 行は、結果を出力するための最善の努力です。では、オブジェクトを実行して、すべての値を特定の文字列に変更するにはどうすればよいでしょうか?

おまけの質問: この関数を微調整して、真/偽の値を検索し、偽の値のみを削除するにはどうすればよいですか?

4

2 に答える 2

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;
  }, {});
}
于 2016-04-29T01:40:21.897 に答える
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>");

于 2016-04-29T01:51:17.057 に答える