[英]RegEx for accessing a nested object
我有一些JS對象,每個對象都有一個孫子屬性,稱為“產品”。
例如ecommerce.add.products, ecommerce.remove.products, ecommerce.detail.products, ecommerce.checkout.products, ecommerce.purchase.products
我想訪問products數組,而不管上面的具體對象是什么。
使用正則表達式嘗試:
var ecomProducts = ecom[('detail'|'add'|'remove'|'checkout'|'purchase')]['products'];
類型錯誤:ecom [((((((“ detail” |“ add”)|“ remove”)|“ checkout”)|“ purchase”)]未定義
var ecomProducts = ecom[/'detail'|'add'|'remove'|'checkout'|'purchase'/]['products'];
TypeError:ecom [/'detail'|'add'|'remove'|'checkout'|'purchase'/]未定義
無論父母的名字是什么,如何訪問嵌套的孫子“產品”對象?
你可以簡單地通過循環ecom
對象和檢查以下的道具存在的detail','add','remove','checkout','purchase'
上ecom
對象,
像這樣的東西
let outerKey = ['detail','add','remove','checkout','purchase']
let foundProducts = outerKey.reduce((op,inp) => {
if(ecom[inp] && ecom[inp].products && ecom[inp].products.length){
op.push(ecom[inp].products)
}
return op
},[])
使用正則表達式嘗試:
var ecomProducts = ecom[('detail'|'add'|'remove'|'checkout'|'purchase')]['products'];
不,這不是正則表達式,這只是邏輯OR ,所以您總是以ecom['checkout']['products']
結尾
假設您有一個類似這樣的對象:
ecommerce = { add: { products: ['add products'] }, remove: { products: ['remove'] }, detail: { products: ['prod details'] }, checkout: { products: ['checkout'] }, purchase: { products: ['purchase'] } }; for( var x in ecommerce )"products" in ecommerce[ x ] ? console.log( ecommerce[ x ].products ) : 0;
您無法從發生的任何樹木上摘蘋果-您將需要參觀樹木和包含它們的樹枝...
最簡單,最可移植的方法是擁有一個使用以下表達式的函數:
for( var x in ecommerce )"products" in ecommerce[ x ] ?
console.log( ecommerce[ x ].products ) : 0;
並運行無錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.