【发布时间】:2019-08-15 08:17:27
【问题描述】:
我有一个我无法控制的嵌套结构不一致的对象。如果满足某个条件,我需要提取某个值。
目前通过递归迭代属性并将属性与条件匹配并将匹配的值推送到一个空数组来实现,如下所示:
var obj = {"a":0,"b":{"x":1,"y":100},"c":[{"x":1,"y":120},{"x":2,"y":140}]};
var extracts = [];
extractProp(obj);
function extractProp(obj){
for (var key in obj){
if (key == "x" && obj[key]=="1"){
extracts.push(obj["y"]);
} else {
extractProp(obj[key]);
}
}
}
console.log(extracts); //(2) [100, 120]
这让我得到了预期的结果。在我之前的question 中,有人指出了通过在 JSON.parse 上传递 reviver 参数来修改部分 json 的更好方法。这让我想到必须也有更好的方法来做到这一点。 javascript中是否有任何本机/内置函数?
【问题讨论】:
-
IMO 您当前的方法很好,代码的意图很清楚,实际上没有什么可以减少的。我更喜欢
Object方法而不是for..in,但for..in在这里仍然可以正常工作 -
快速思考,我认为 reviver 函数不允许反向引用,所以如果你想要逆向(
x基于y的值)那么你会被搞砸的。你的方法从这里看起来并没有那么糟糕,除了我会添加一些 if(hasOwnProperty) 和 if(obj && typeof obj === "object")
标签: javascript arrays object reviver-function