【发布时间】:2015-06-04 07:13:37
【问题描述】:
我有 JSON 对象,我需要清理以 $ 开头的属性。所以给定下面的结构应该去掉$aaa、$bbb、$ccc和$eee:
{
$aaa: "$aaa",
bbb: "bbb",
$ccc: {
$ccc2: "$ccc2",
ccc2a: "ccc2a"
},
ddd: {
$ddd: "$ddd2",
ddd2a: "ddd2a"
},
$eee: "$eee",
fff: "fff"
}
我还想让它异步运行并使用 Promises。但是我很难让它工作。它无法清理 $eee 并且不确定我哪里出错了。以下是完整代码和plunker is here:
function clean$(obj1) {
var obj = obj1;
return new Promise(function(res, rej) {
setTimeout(function() {
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
if (i.match(/^\$/)) {
console.log("delete this " + i);
delete obj[i];
} else if (typeof obj[i] === "object") return clean$(obj[i]);
}
}
res();
}, 1000);
})
}
sample = {
$aaa: "$aaa",
bbb: "bbb",
$ccc: {
$ccc2: "$ccc2",
ccc2a: "ccc2a"
},
ddd: {
$ddd: "$ddd2",
ddd2a: "ddd2a"
},
$eee: "$eee",
fff: "fff"
}
clean$(sample).then(function(res) {
console.log("why it never gets here???");
})
【问题讨论】:
-
返回
setTimeout()中的任何内容绝对没有任何作用。它只是返回到计时器引擎的内部。
标签: javascript recursion promise