使用函数 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>");
我正在构建一个函数,它使用 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>");