使用函数 for-in 循环遍历对象以更改值然后 return 结果

Using function to for-in loop through object to change values then return result

我正在构建一个函数,它使用 for-in 循环遍历任何对象,将其值(无论它们是数字、字符串还是布尔值)更改为单个特定字符串,然后输出它。我已经解决了一系列现有问题,这些问题帮助我对 for-in 循环有了一个大致的了解。我一直在试图弄清楚如何使函数进行更改然后 return 新值。这是我目前所拥有的:

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]);

行,我无法绕过。我是从 Whosebug 上的一个问题中得到的。 return whateverObject 行只是我输出结果的最大努力。那么我如何 运行 通过对象并将所有值更改为特定字符串?

奖金问题:我如何调整此功能以搜索 true/false 值并仅删除错误值?

问题是......你根本没有改变任何东西: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;
}; 

How would I tweak this function to search for true/false values and remove only the false ones?

现在进行一些高级 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;
  }, {});
}

另一种方法

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>");