首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当对象中的所有字段都存在时,如何通过对象数组进行映射?

问当对象中的所有字段都存在时,如何通过对象数组进行映射?
EN

Stack Overflow用户
提问于 2018-03-31 00:18:54
回答 1查看 38关注 0票数 0

我需要从一个包含许多(嵌套的)对象的数组中获取单个对象值,并将这些值保存在一个新的数组中。这可以很好地与map配合使用,如下所示:

代码语言:javascript
复制
var newArrayA = array.map(x => x.PI[0].ZZ);
var newArrayB = array.map(x => x.FS.CC.FR);
var newArrayC = array.map(x => x.FS.BD.FR);

在所有对象都包含所有值的情况下,如下所示:

代码语言:javascript
复制
var array =
     [ 
      { _id: 'MEuDZjQDw8XQk4ny7Y',
         PI: [        
              {ZZ: "ABC"}
             ],
         FS:
          { CC: {FR: 1},
            BD: {FR: 2} 
          }
       },
       { _id: 'gFsya9tHMAkAoPgvw',
         PI: [        
              {ZZ: "DEF"}
             ],
         FS:
          { CC: {FR: 3},
            BD: {FR: 4} 
          }
       }
     ]

在数组的数据结构中可能有更多的'id‘对象以及更多的字段。但是,如果第二个对象不包含FS字段,我会收到一个错误:

代码语言:javascript
复制
var array =
 [ 
  { _id: 'MEuDZjQDw8XQk4ny7Y',
     PI: [        
          {ZZ: "ABC"}
         ],
     FS:
      { CC: {FR: 1},
        BD: {FR: 2} 
      }
   },
   { _id: 'gFsya9tHMAkAoPgvw',
     PI: [        
          {ZZ: "DEF"}
         ]
   }
 ]

问题是我仍然需要从包含这些值的对象中获取FS.CC或FS.BD值。如果值不在对象中,则得到“空”或“未定义”,如果值在对象中,则完全没有问题:

代码语言:javascript
复制
var neededNewArrayC = [2, "empty"];

或者有没有别的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-31 00:22:45

您可以使用&&防护:

代码语言:javascript
复制
var newArrayB = array.map(x => x.FS && x.FS.CC && x.FS.CC.FR);
// ----------------------------^^^^^^^^^^^^^^^^^^^

如果x不包含FS,则x.FS将为undefined,并且&&表达式将使用undefined作为其值。x.FS.CC也是如此。但是如果x.FS.CC存在(并且不是falsy),结果将是x.FS.CC.FR的值。

示例:

​

代码语言:javascript
复制
var a = [
  { // Has everything
    FS: {
      CC: {
        FR: "the FR value"
      }
    }
  },
  { // No .FS.CC
    FS: {
    }
  },
  { // No .FS
  }
];
console.log(a.map(x => x.FS && x.FS.CC && x.FS.CC.FR));

​

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49577764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档