为了账号安全,请及时绑定邮箱和手机立即绑定

用于访问嵌套对象的正则表达式

用于访问嵌套对象的正则表达式

浮云间 2021-06-11 16:02:31
我有一些 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'];类型错误:ecom[(((("detail" | "add") | "remove") | "checkout") | "purchase")] 未定义var ecomProducts = ecom[/'detail'|'add'|'remove'|'checkout'|'purchase'/]['products'];类型错误:ecom[/'detail'|'add'|'remove'|'checkout'|'purchase'/] 未定义无论父母姓名如何,如何访问嵌套的孙子“产品”对象?
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

你可以简单地通过循环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']


查看完整回答
反对 回复 2021-06-11
?
富国沪深

TA贡献1790条经验 获得超9个赞

假设你有一个这样的对象:


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;

并无错误运行。


查看完整回答
反对 回复 2021-06-11
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信