RegEx для доступа к вложенному объекту - PullRequest
1 голос
/ 27 мая 2019

У меня есть несколько объектов JS, и у каждого из них есть свойство внука, называемое «products».

Например, 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'];

TypeError: ecom [(((("detail" | "add") | "remove")| "checkout") | "покупка")] не определено

var ecomProducts = ecom[/'detail'|'add'|'remove'|'checkout'|'purchase'/]['products'];

Ошибка типа: ecom [/ 'detail' | 'add' | 'remove' | 'checkout' | 'покупка '/] не определена

Как получить доступ к вложенному внуку объекту' products 'независимо от имени родителей?

Ответы [ 2 ]

3 голосов
/ 27 мая 2019

Вы можете просто пройти через объект 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'];

Нет, это не регулярное выражение, это просто логическое ИЛИ , поэтому вы всегда заканчиваете ecom['checkout']['products']

1 голос
/ 27 мая 2019

Допустим, у вас есть такой объект ::

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;

и запустить без ошибок.

...