我有一个对象myObj
,例如:
{
0: true,
1: false,
2: false
}
要将每个值设置为 true
,我可以使用循环:
for (i in myObj) {
myObj[i] = true
}
但是有没有一种实用的方法可以在 JavaScript 中做到这一点?像这样的东西:
myOjb.fill(true)
最佳答案
你想要Object.keys
(如果在您的环境中可用)。它枚举当前对象上的键,跳过原型(prototype)属性等。
你只需这样做:
function fill(obj) {
Object.keys(obj).forEach(function (key) {
obj[key] = true;
});
}
如果你想真正发挥作用,你可以使用减少和避免副作用:
function fill(obj) {
return Object.keys(obj).reduce(function (p, key) {
p[key] = true;
return p;
}, {});
}
如果您想保持与原始对象相同的原型(prototype),假设您正在使用具有无参数构造函数(对象和数组计数)的简单类型,则可以使用 obj.constructor像:
function fill(obj) {
return Object.keys(obj).reduce(function(p, key) {
p[key] = true;
return p;
}, new obj.constructor);
}
var filledObject = fill({
bar: false,
baz: 3,
boo: 'test'
});
var filledArray = fill([1, 2, 3, 4, false, 'test']);
document.getElementById('obj').textContent = JSON.stringify(filledObject);
document.getElementById('arr').textContent = JSON.stringify(filledArray);
var evilSparseArray = [1, 2, 3];
evilSparseArray[19] = 4;
document.getElementById('spa').textContent = JSON.stringify(fill(evilSparseArray));
<pre id="obj"></pre>
<pre id="arr"></pre>
<pre id="spa"></pre>
请注意,这对于稀疏数组无法正常工作,因为定义了其他键但没有有意义的数据。
关于javascript - 函数式 JS 设置对象的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972383/