Javascript 将JS对象中的所有属性返回到";“空的”;状态
我想知道像jQuery这样的框架中是否有一个实用函数来截断JS对象(有不止一个可能的结果,不确定什么是最有用的):Javascript 将JS对象中的所有属性返回到";“空的”;状态,javascript,object,truncate,Javascript,Object,Truncate,我想知道像jQuery这样的框架中是否有一个实用函数来截断JS对象(有不止一个可能的结果,不确定什么是最有用的): 如果没有,有没有比递归迭代所有属性、检查类型以及在必要时删除/重置更聪明的解决方案?您可能正在寻找省略,部分 省略。省略(对象,*键)返回对象的副本,过滤到 省略黑名单中的键(或键数组)。或者接受 指示要忽略哪些键的谓词 _.omit({name:'moe',年龄:50,userid:'moe1'},'userid'); =>{姓名:'moe',年龄:50} _.omit({nam
如果没有,有没有比递归迭代所有属性、检查类型以及在必要时删除/重置更聪明的解决方案?您可能正在寻找省略,部分 省略。省略(对象,*键)返回对象的副本,过滤到 省略黑名单中的键(或键数组)。或者接受 指示要忽略哪些键的谓词 _.omit({name:'moe',年龄:50,userid:'moe1'},'userid'); =>{姓名:'moe',年龄:50} _.omit({name:'moe',age:50,userid:'moe1'},函数(值、键、对象){return}.isNumber(值);}); =>{name:'moe',userid:'moe1'}
为每个属性调用构造函数以创建相同类型的空对象
for (var k in obj) {
obj[k] = obj[k] && obj[k].constructor();
}
这也会将数字返回到0,布尔值返回到false,日期返回到现在,正则表达式返回到空(但NaN仍然是NaN)
要递归执行此操作,请保留对象值属性,但也将其清空(变体3):
要消除数字(变量2),请添加一个复选框:
function truncate(obj) {
for (var k in obj) {
var ctor = obj[k] && obj[k].constructor;
if (ctor === Object) truncate(obj[k]);
else if (ctor === Number) delete obj[k];
else if (ctor) obj[k] = ctor();
}
}
+1个好主意,但不能用于
未定义的
或null
值。非常简洁,谢谢<代码>日期s重置为现在,函数也被截断NaN
和Infinity
被重置为0
,这是有意义的,因为它们都属于number
类型。是的,并且由于某些原因,RegExp被重置为/(?:)/
/
不能用于创建空的RegExp,因为它显然用于单行注释<可以使用code>/()/,但()
会创建一个捕获组。因此,使用了/(?:)/
(?:
表示非捕获组)。您的变量2不起作用,没有变量val
,即使在我添加var val=obj[k]之后,它似乎也不会递归到对象中代码>这似乎解决了另一个问题。
var obj={
foo:"bar",
arr:[1,2,3],
sub:{b:4,c:5,subsub:{e:6}}
}
obj.clear()//returns {foo:"",arr:[],sub:{}}
for (var k in obj) {
obj[k] = obj[k] && obj[k].constructor();
}
function truncate(obj) {
for (var k in obj) {
var ctor = obj[k] && obj[k].constructor;
if (ctor === Object) truncate(obj[k]);
else if (ctor) obj[k] = ctor();
}
}
function truncate(obj) {
for (var k in obj) {
var ctor = obj[k] && obj[k].constructor;
if (ctor === Object) truncate(obj[k]);
else if (ctor === Number) delete obj[k];
else if (ctor) obj[k] = ctor();
}
}