2 回答

TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊
不確定這是否是您正在尋找的,但以下代碼遞歸地將對象和數(shù)組映射到它們的“regions”鍵,并在每一步進(jìn)行展平。
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貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
這是一個使用對象作為 json 的解決方案,然后使用正則表達(dá)式在其中進(jìn)行搜索。我猜想存在其他方法以更好的方式構(gòu)建正則表達(dá)式,因為我必須使用替換方法來刪除引號。您可以使用一些衡量性能的工具。
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;
}, [])
添加回答
舉報