2017-10-10 69 views
-2

我:如何检查是否存在对象值“的”操作员/回调使用

arrFrom = [{a: 1, b: 1}, {a: 1, b: undefined}] 
arrTo = [] 

我尝试从arrFrom创造新arrTo:

for (let value of arrFrom){ 
arrTo.push({x: value.a, y: value.b }) 
} 

我需要捕捉不定值。 我知道,我可以使用的功能或操作符,如:

arrTo.push({x: value.a, y: value.b || 0 }) 
arrTo.push({x: value.a, y: value.b ? value.b: 0 }) 

我可以用“在”运营商/回调/其他风格?

编辑: 感谢意见, 我的意思是,如果可以使用如下语法(这不起作用):

arrTo.push({x: value.a, y: ('undefined' in value.b) ? true: 0 }) 
+0

的可能的复制[如何检查“未定义”在JavaScript?](https://stackoverflow.com/questions/3390396/how-to-check-for-undefined-in-javascript) – MaxZoom

+4

你的点符号是倒退。它应该是'value.a'和'value.b'。 – 4castle

+1

你已经提出的解决方案有什么问题?我不确定我是否理解这个问题。 – 4castle

回答

1
arrTo.push({x: a.value, y: b.value || 0 }) 

我认为这是一个非OP,0永远不会因为永远是虚假的。 然后你可以使用:

arrTo.push({x: a.value, y: ('value' in b) ? b.value: 0 }) 

检查undefined是一个很长的故事,但我总是习惯:

typeof value != 'undefined' && value !== null 
+0

'a'和'b'不是定义变量,'value'是,'a'和'b'是'value'的字段。 – 4castle

+0

谢谢你的想法,不幸的是这不起作用 'arrTo.push({x:a.value,y:('undefined'in b)?true:0})' – gGotcha

+0

obj = {a:1,b: undefined} copy = {}; if('b'in obj)copy.b = obj.b; 你需要先阅读一些Javascript的书... – David

0

你的意思是这样做:

arrFrom = [{a: 1, b: 1}, {a: 1, b: undefined}]; 
arrTo = []; 
for (var value of arrFrom){ 
arrTo.push({x: value.a, y: value.b || 0 }) 
} 
console.log(arrTo); // [ { "x": 1, "y": 1 }, { "x": 1, "y": 0 } ]