簡體   English   中英

RegEx用於訪問嵌套對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM