0

我有一个我无法控制的嵌套结构不一致的对象。如果满足某个条件,我需要提取某个值。

目前通过递归迭代属性并将属性与条件匹配并将匹配的值推送到一个空数组来做到这一点,如下所示:

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]

这让我得到了预期的结果。在我之前的问题中,有人指出了通过在 JSON.parse 上传递 reviver 参数来修改部分 json 的更好方法。这让我想到必须有更好的方法来做到这一点。javascript中是否有任何本机/内置函数?

4

1 回答 1

0

不是更好但更快

在此处检查比较http://jsben.ch/7OZfP

let obj = { "a": 0, "b": { "x": 1, "y": 100 }, "c": [{ "x": 1, "y": 120 }, { "x": 2, "y": 140 }] };

var extracts = [];
extractProp(obj);

function extractProp() {
	Object.entries(obj).forEach(([key, val]) => {
		if (typeof val === 'object') {
			if (Array.isArray(val)) {
				val.forEach(gety)
			} else {
				gety(val)
			}
		}
	});
}

function gety({ x, y }) {
	if (x == 1 && y)
		extracts.push(y);
}
console.log(extracts); //(2) [100, 120]

于 2019-03-25T06:49:03.867 回答