Javascript 检查map函数内的JSON响应中是否存在键

Javascript 检查map函数内的JSON响应中是否存在键,javascript,json,Javascript,Json,例如,我收到一个JSON响应: [ { 'key_1': 'value1A', 'key_2': 'value2A', 'key_3': 'value3A' }, { 'key_1': 'value1B', 'key_2': 'value2B', } ] 正如所观察到的,数组的第二个元素中没有提供键3。此处,数组中每个对象的键都相同 比方说,我只对使用响应的key_2和key_3感兴趣,因此我使用map,如下所示 this.serv.ge

例如,我收到一个JSON响应:

[
  {
    'key_1': 'value1A',
    'key_2': 'value2A',
    'key_3': 'value3A'
  },
  {
    'key_1': 'value1B',
    'key_2': 'value2B',
  }
]
正如所观察到的,数组的第二个元素中没有提供键3。此处,数组中每个对象的
键都相同

比方说,我只对使用响应的
key_2
key_3
感兴趣,因此我使用
map
,如下所示

this.serv.getInfo(code) // HTTP GET service
  .subscribe(res => {
    this.data = res.map(el => { // only use necessary key:value pairs
      let _out = { // make an object to return

        'new_key_1': el.key_2
        'new_key_2': '' // if there is no key_3 then leave it empty

      }
      if ('key_3' in el) { // if this pair exists then add it..

        _out['new_key_2'] = el.key_3
        return _out;

      }

      return _out; // if not return with empty string
    });
  });
在这种情况下,JSON响应很小,因此效果很好。但是我假设如果JSON结构庞大而复杂,那么if(…in el)
检查可能会增加很多倍


在这种情况下,将响应映射到新对象时,哪个操作符最适合进行更动态的检查。甚至有必要在
map
函数中创建一个temp
\u opt
对象吗?

您可以使用
el['key\u 3']|'
,它被称为

演示
let数据=[
{
“键1”:“值1a”,
“键2”:“值2a”,
“键3”:“值3a”
},
{
“键1”:“值1b”,
“键2”:“值2b”,
}
],
arr=数据映射((el)=>{
返回{'key_1':el['key_2'],'key_2':el['key_3']||'''};
});

控制台日志(arr)
您需要注意
|
,因为它不会“检查”键是否存在,但它会检查收到的值是否有误。因此,如果
null
0
存储为值,则这些值将被忽略并替换为
'
。因此,如果为
key\u 3
返回的值是真实的,而不是密钥存在,则其计算结果为
el['key\u 3']
。@t.niese祝您好运!如果必须涵盖这些情况,
type of el['key_3']!=“未定义”?el['key_3']:''而不是使用
中的
运算符是真正检查
是否存在的唯一测试。对于
var obj={a:undefined}
'a'在obj
中是
真的
,但是
obj['a'的类型!=“未定义”
false
。我并不是说
|
是一个错误的解决方案。我只是说,你在答案开头的陈述是错误的,应该予以纠正。
|
是否有效取决于用例。@t.niese谢谢,我同意你的说法,这是一个错误的陈述!修好了柱子