【发布时间】:2018-08-28 15:49:08
【问题描述】:
假设我有这样的数组:
$game = Array
(
['round'] => Array
(
['match'] => Array
(
['player_2'] => Array
(
[name] => asddd
[id] => 1846845
[winner] => yes
)
['player_21'] => Array
(
[name] => ddd
[id] => 1848280
[winner] => no
)
)
)
)
假设在 Node.js/Javascript 中我需要检查 player_3 winner 键值是否为 yes。在 PHP 中,你做了这样的事情:
if( $game['round']['match'][player_3]['winner'] == 'yes'){
}
因为没有 player_3 它在 PHP 中返回 false,但如果我在 Javascript 中做了类似的事情:
if( typeof game['round']['match'][player_3]['winner'] != 'undefined' && game['round']['match'][player_3]['winner'] == 'yes'){
}
我会得到错误:(node:15048) UnhandledPromiseRejectionWarning: TypeError: Cannot read property '0' of undefined,因为数组中不存在player_3,并且您无法检查数组的键值,它不存在。
您可以在 Javascript 中执行此操作:
if(
typeof game['round'] != 'undefined' &&
typeof game['round']['match'] != 'undefined' &&
typeof game['round']['match']['player_3'] != 'undefined' &&
typeof game['round']['match']['player_3']['winner'] != 'undefined' &&
typeof game['round']['match']['player_3']['winner'] == 'yes'
){
var playerIsWinner = true;
}else{
var playerIsWinner = false;
}
您从上到下检查数组中的每个数组并确保它们存在。我不知道它是否真的有效,但即使有效,检查某些东西似乎也是一种糟糕而愚蠢的方式。我的意思是看看它在 PHP 中是多么简单,而在 Javascript 中我必须检查每个数组是否存在于数组中。那么有没有更好的方法检查数组的值?
【问题讨论】:
-
您可以将其包装在
try...catch块中
标签: javascript arrays node.js