我无法循环访问对象并将所有值更改为其他值,假设我想将所有值更改为字符串“redacted”。我需要能够在纯JavaScript中执行此操作。
例如,我有一个像这样的对象......
spy = {
id: 007,
name: "James Bond",
age: 31
};
并且......之后对象看起来像这样......
spy = {
id: "redacted",
name: "redacted",
age: "redacted"
};
这是我必须从
开始的var superSecret = function(spy){
// Code Here
}
这不应该创建一个新的间谍对象,而是更新它。
答案 0 :(得分:18)
试
generateNotification(String alertMessage)
答案 1 :(得分:7)
您也可以使用。
使用Object.keys
更好,因为您只会遍历对象属性,而不是原型链。
Object.keys(spy).reduce((acc, key) => {acc[key] = 'redacted'; return acc; }, {})
答案 2 :(得分:2)
一个不错的解决方案是结合使用Object.keys和reduce-不会改变原始对象;
var superSecret = function(spy){
return Object.keys(spy).reduce(
(attrs, key) => ({
...attrs,
[key]: 'redacted',
}),
{}
);
}
答案 3 :(得分:2)
此版本更简单:
Object.keys(spy).forEach(key => {
spy[key] = "redacted");
});
答案 4 :(得分:1)
There was 1 failure:
1) ExampleTest::testBasicExample
A request to [http://localhost/test] failed. Received status code [404].
答案 5 :(得分:0)
我写了一个小助手函数,它遍历一个对象并对每个条目应用回调:
iterateEntries(node, fn) {
const newNode = {};
Object.entries(node).forEach(([key, val]) => (newNode[key] = fn(val)));
return newNode;
}
用法:
iterateEntries(yourObject, (entry) => {
return entry; // do something with entry here
});
答案 6 :(得分:-1)
使用代理:
function superSecret(spy) {
return new Proxy(spy, { get() { return "redacted"; } });
}
> superSecret(spy).id
< "redacted"
答案 7 :(得分:-1)
let dataArray = [
{
total: 112,
tax: 51,
key:0,
},
{
total: 58,
tax: 53,
key:0,
}
];
dataArray.map((data, i) => {
dataArray[i].key = data.total - data.tax;
});
console.log(dataArray);