gpt4 book ai didi

javascript - 将 JS 对象中的所有属性返回到 "empty"状态

转载 作者:行者123 更新时间:2023-12-02 06:33:34 29 4
gpt4 key购买 nike

我想知道在像 jQuery 这样的任何框架中是否有一个实用函数来 chop 一个 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}} }

如果不是,是否有比递归遍历所有属性、检查类型并在必要时删除/重置更聪明的解决方案?

最佳答案

调用每个属性的构造函数来创建一个相同类型的空对象。

for (var k in obj) {
obj[k] = obj[k] && obj[k].constructor();
}

这也会将数字返回为 0,将 bool 值返回为假,将日期返回为现在,将正则表达式返回为空(但 NaN 仍为 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();
}
}

要消除数字(变体 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();
}
}

关于javascript - 将 JS 对象中的所有属性返回到 "empty"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305374/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com