CoD*_*anX 2 javascript truncate object clear
我想知道在jQuery这样的任何框架中是否有一个实用函数来截断一个JS对象(有多个可能的结果,不确定什么是最有用的):
{ // original object
foo: "bar",
arr: [1, 2, 3],
sub: {a: 4, b: 5, subsub: {c: 6}} }
{ // truncated, variant 1
foo: "",
arr: [],
sub: {} }
{ // truncated, variant 2
foo: "",
arr: [],
sub: {subsub: {}} }
{ // truncated, variant 3
foo: "",
arr: [],
sub: {a: 0, b: 0, subsub: {c: 0}} }
Run Code Online (Sandbox Code Playgroud)
如果不是,是否有一个比递归迭代所有属性更聪明的解决方案,检查类型并在必要时删除/重置?
小智 7
调用每个属性的构造函数以创建相同类型的空对象.
for (var k in obj) {
obj[k] = obj[k] && obj[k].constructor();
}
Run Code Online (Sandbox Code Playgroud)
这也将数字返回0,布尔值为false,日期为现在,正则表达式为空(但NaNs仍为NaN).
要以递归方式执行此操作,保留对象值属性,但也将它们清空(变体3):
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();
}
}
Run Code Online (Sandbox Code Playgroud)
要消除数字(变体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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |