2 回答

TA贡献1852条经验 获得超1个赞
不确定这是否是您正在寻找的,但以下代码递归地将对象和数组映射到它们的“regions”键,并在每一步进行展平。
function isArray(what) {
return Object.prototype.toString.call(what) === '[object Array]';
}
function searchObj(obj) {
return Object.keys(obj).map(key => {
if (key == "regions" && isArray(obj.regions)) return obj[key];
else if (isArray(obj[key])) return searchArray(obj[key]);
else if (typeof obj === "object") return searchObj(obj[key]);
else return [];
}).flat();
}
function searchArray(obj) {
return obj.map(elem => searchObj(elem)).flat();
}
用法:
searchObj(data)
> ["United States", "Canada", "United States", "Canada", "Mexico", "United States", "Canada"]
Array.prototype.flat||Object.defineProperty(Array.prototype,"flat",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,"flatMap",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})

TA贡献1802条经验 获得超4个赞
这是一个使用对象作为 json 的解决方案,然后使用正则表达式在其中进行搜索。我猜想存在其他方法以更好的方式构建正则表达式,因为我必须使用替换方法来删除引号。您可以使用一些衡量性能的工具。
const data = {
sourceId: {
S: "some_string"
},
ignored: {
BOOL: false
},
stepFunctionArn: {
S: "some_string"
},
certificate: {
BOOL: true
},
infoNeeded: {
L: [
"Array"
]
},
queuesLinks: {
M: [
"Object"
]
},
};
[...JSON.stringify(data).matchAll(/(?:\"regions\"\:\[)(?:\")(.*?)(?:\")\]/gi)].reduce(function(a, v) {
a = a.concat(v[1].replace(/\"/g,"").split(','));
return a;
}, [])
添加回答
举报