例如,我收到了JSON响应:
[
{
'key_1': 'value1A',
'key_2': 'value2A',
'key_3': 'value3A'
},
{
'key_1': 'value1B',
'key_2': 'value2B',
}
]
如所观察到的,在数组的第二个元素中未提供key_3
。这里keys
对于数组中的每个对象都是相同的。
让我们说,我有兴趣只使用响应的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)
检查可能会增加许多倍。
在将响应映射到新对象时,哪种运算符最适合用于更多动态检查。是否有必要在_opt
函数中创建临时map
对象?
答案 0 :(得分:1)
您可以使用el['key_3'] || ''
,即Short-circuit evaluation。
let data = [
{
'key_1': 'value1A',
'key_2': 'value2A',
'key_3': 'value3A'
},
{
'key_1': 'value1B',
'key_2': 'value2B',
}
],
arr = data.map((el) => {
return {'key_1': el['key_2'], 'key_2': el['key_3'] || ''};
});
console.log(arr);

但是,它不包括el['key_3']
等于null
,undefined
,false
,0
的情况。
如果这是不可接受的,那么in
运算符是真正确定对象中是否存在键的唯一方法。您可以将其与ternary operator一起使用,从而避免使用临时对象 - 请参阅演示
let data = [
{
'key_1': 'value1A',
'key_2': 'value2A',
'key_3': 'value3A'
},
{
'key_1': 'value1B',
'key_2': 'value2B',
'key_3': undefined,
}
],
arr = data.map((el) => {
return {'key_1': el['key_2'], 'key_2': 'key_3' in el ? el['key_3'] : ''};
});
console.log(arr);