如何在Javascript中获取属性的最后一个元素,如果它不';不存在
在线分级器的大多数条件表明测试通过,但如果最后一个属性不存在,则返回undefined(如果不存在,则应返回undefined) 评分员在这种情况下告诉我“TypeError:obj[key]未定义”。也许这很容易,但我不明白我错过了什么。这是我到目前为止所拥有的如何在Javascript中获取属性的最后一个元素,如果它不';不存在,javascript,Javascript,在线分级器的大多数条件表明测试通过,但如果最后一个属性不存在,则返回undefined(如果不存在,则应返回undefined) 评分员在这种情况下告诉我“TypeError:obj[key]未定义”。也许这很容易,但我不明白我错过了什么。这是我到目前为止所拥有的 函数getLastElementOfProperty(obj,键){ var length=obj[key].length 如果(长度==0){ 返回未定义 } if(!Array.isArray(obj[key])){ 返回未定
函数getLastElementOfProperty(obj,键){
var length=obj[key].length
如果(长度==0){
返回未定义
}
if(!Array.isArray(obj[key])){
返回未定义
}
if(obj[key].length==0){
返回未定义
}
否则{
返回对象[key][length-1]
}
}
如果obj[key]
不存在,则尝试obj[key].length是一个错误。在此之前进行一次检查,以发现该情况:
if (typeof obj[key] === "undefined")
如果obj[key]
不存在,则尝试obj[key].length
是错误的。在此之前进行一次检查,以发现该情况:
if (typeof obj[key] === "undefined")
obj[key].length在没有此类键时将抛出错误,因为它将转换为undefined.length
将其更改为以下代码:
if (typeof obj[key] === 'undefined') {
return undefined;
}
优化您的ifs:
若在if条件段中发现false,解析器将不计算进一步的条件。例如,如果obj[key]==“undefined”
的类型为i,则不会检查数组.isArray(obj[key])
因此,基本上您的函数可以转换为单线:
function getLastElementOfProperty(obj, key) {
return typeof obj[key] !== 'undefined' && Array.isArray(obj[key]) && obj[key].length !== 0
? obj[key][length-1]
: undefined;
}
obj[key].length在没有此类键时将抛出错误,因为它将转换为undefined.length
将其更改为以下代码:
if (typeof obj[key] === 'undefined') {
return undefined;
}
优化您的ifs:
若在if条件段中发现false,解析器将不计算进一步的条件。例如,如果obj[key]==“undefined”
的类型为i,则不会检查数组.isArray(obj[key])
因此,基本上您的函数可以转换为单线:
function getLastElementOfProperty(obj, key) {
return typeof obj[key] !== 'undefined' && Array.isArray(obj[key]) && obj[key].length !== 0
? obj[key][length-1]
: undefined;
}
修改代码并添加obj[key]验证
function getLastElementOfProperty(obj, key) {
var returnVal;
if( obj[key] ){
var isArray = Array.isArray( obj[key] ),
length = obj[key].length;
if( isArray && length ){
returnVal = obj[key][length - 1];
}
}
return returnVal;
}
修改代码并添加obj[key]验证
function getLastElementOfProperty(obj, key) {
var returnVal;
if( obj[key] ){
var isArray = Array.isArray( obj[key] ),
length = obj[key].length;
if( isArray && length ){
returnVal = obj[key][length - 1];
}
}
return returnVal;
}
您也可以尝试使用
if (!(key in obj)) return "undefined";
在所有其他检查之前。您也可以使用
if (!(key in obj)) return "undefined";
在所有其他检查之前。最简单的代码使用以下事实:数组[-1]
是未定义的
,没有返回与返回未定义相同
测试obj&&
,因此如果将null/undefined等作为对象传递,它不会中断
所以只是
function getLastElementOfProperty(obj, key) {
if (obj && Array.isArray(obj[key])) {
return obj[key][obj[key].length - 1];
}
}
您可以将return语句更改为
return obj[key].slice(-1).pop() as well
如果你想成为极简主义者
function getLastElementOfProperty(obj, key) {
return ((obj && Array.isArray(obj[key]) && obj[key].slice(-1)) || []).pop();
}
最简单的代码使用这样一个事实,即数组[-1]
是未定义的
,并且没有返回与返回未定义相同
测试obj&&
,因此如果将null/undefined等作为对象传递,它不会中断
所以只是
function getLastElementOfProperty(obj, key) {
if (obj && Array.isArray(obj[key])) {
return obj[key][obj[key].length - 1];
}
}
您可以将return语句更改为
return obj[key].slice(-1).pop() as well
如果你想成为极简主义者
function getLastElementOfProperty(obj, key) {
return ((obj && Array.isArray(obj[key]) && obj[key].slice(-1)) || []).pop();
}
为什么您首先接收对象长度,然后只检查它是否为数组?这是正确的答案,我将尝试自己解决它以完全获得它。谢谢你,先生,谢谢所有帮助我的人。几分钟后我会接受的,到时候我会接受的。@Justinas-你说得对。让我更新代码。(注意-长度检查可能会格外小心。如果我们使用isArray检查,可能不需要它。)为什么您首先接收对象长度,而只检查它是否为数组?这是正确的答案,我将尝试自己完成它以完全获得它。谢谢你,先生,谢谢所有帮助我的人。几分钟后我会接受的,到时候我会接受的。@Justinas-你说得对。让我更新代码。(注意-长度检查可能非常谨慎。如果我们使用isArray检查,则可能不需要进行长度检查。)