作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道在像 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/
到目前为止,我已经生成了以下代码来尝试将相关数据整合在一起。 但是,使用“+ 7”函数会产生以下问题。 Registration date = '2018-01-01' 它正在推迟 2018-04-0
我已经成功地将我的自定义购物车发布到 PayPal——它处理订单非常漂亮,当收到付款时,它会将数据发回我在配置中指定的 URL。代码基于此处找到的库:http://www.phpfour.com/bl
我是一名优秀的程序员,十分优秀!