Javascript 在es6中解析对象时,如果对象中存在值,则存储变量

Javascript 在es6中解析对象时,如果对象中存在值,则存储变量,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个对象,如下所示: { "_attrib": { "PieChart": "T", "ProductSettings": "true" }, "WATER": { "_attrib": { "Step": "5", "ProgressAdjust&

我有一个对象,如下所示:

{
"_attrib": {
    "PieChart": "T",
    "ProductSettings": "true"
},
"WATER": {
    "_attrib": {
        "Step": "5",
        "ProgressAdjust": "41",
    }
},
"TEMP": {
    "_attrib": {
        "Argument": "F7",
        "Default": "00"
    },
    "ITEM": [
        {
            "_attrib": {
                "Name": "Low",
            }
        },
        {
            "_attrib": {
                "Name": "Normal",
            }
        },
        {
            "_attrib": {
                "Name": "High",
            }
        }
    ]
  }
}
我需要解析的是找到ProgressAdjust的设置位置,然后将名称(在本例中为WATER)添加到数组中

我有以下代码,但是数组有所有名称(即:_attrib、water、temp)

任何帮助都将不胜感激。

  • 使用
    Object.entries
    将对象转换为键/值对数组
  • 使用
    array#Filter
可选的链接运算符(?)使您能够读取位于连接对象链深处的属性值,而无需检查链中的每个引用是否有效

  • 最后,使用
    Array#map
    仅提取密钥
const
obj={u attrib:{PieChart:{T],ProductSettings:{true},WATER:{u attrib:{Step:{5],ProgressAdjust:{41}},TEMP:{u attrib:{参数:“F7”,默认值:“00”},项:[{{{u attrib:{Name:{Low”},{u attrib:{Name:{Normal nom”},{Name:{High”},
res=Object.entries(obj).filter([,o])=>o?\u attrib?.ProgressAdjust.map([k])=>k)

console.log(res)
对象的结构是否与问题中显示的相同<代码>\u attrib是根道具的某个地方,以及嵌套的两个层次的某个地方。是的,对象与此完全相同。它们表示不同项目的属性。如果
项目
数组中的任何
属性
道具具有
进度调整
是否要将
项目
添加到结果数组中?进度调整只显示在较高级别的属性中,例如在水和温度中,如果其中一个显示我需要在阵列中添加水或温度,请查看我的答案,如果它解决了您的问题,请告诉我您是否有任何问题@akano1
export const productCustomizationOptions = (product: any) => {
  const options = [];
  Object.entries(product.product).forEach((item1, index1) => {
    Object.values(item1[1]).forEach((item2) => {
      if (item2.ProgressAdjust !== 'undefined') {
        options.push(item1[0]);
      }
    });
 });
 console.log('customization options: ', options);
};