jcu*_*nod 0 javascript functional-programming
我有一个对象,myObj如:
{
0: true,
1: false,
2: false
}
Run Code Online (Sandbox Code Playgroud)
要将每个值设置为true,我可以使用循环:
for (i in myObj) {
myObj[i] = true
}
Run Code Online (Sandbox Code Playgroud)
但是在javascript中是否有一种功能性的方法来做到这一点?就像是:
myOjb.fill(true)
Run Code Online (Sandbox Code Playgroud)
您想要Object.keys(如果在您的环境中可用)。它枚举当前对象上的键,跳过原型属性等。
你会简单地做:
function fill(obj) {
Object.keys(obj).forEach(function (key) {
obj[key] = true;
});
}
Run Code Online (Sandbox Code Playgroud)
如果你想真正使用它,你可以使用 reduce 并避免副作用:
function fill(obj) {
return Object.keys(obj).reduce(function (p, key) {
p[key] = true;
return p;
}, {});
}
Run Code Online (Sandbox Code Playgroud)
如果您想保持与原始对象相同的原型,假设您正在使用具有无参数构造函数(对象和数组计数)的简单类型,您可以使用obj.constructor:
function fill(obj) {
Object.keys(obj).forEach(function (key) {
obj[key] = true;
});
}
Run Code Online (Sandbox Code Playgroud)
function fill(obj) {
return Object.keys(obj).reduce(function (p, key) {
p[key] = true;
return p;
}, {});
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不适用于稀疏数组,因为其他键已定义但没有有意义的数据。
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |