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 whateverObject 行只是我输出结果的最大努力。那么我将如何遍历一个对象并将所有值更改为特定字符串?

额外的问题:我将如何调整此功能以搜索真/假值并仅删除假值?

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 回答