我正在尝试解决以下问题。我已经测试过,并且所有下面的条件都应返回到位于给定键处的数组的第n个元素。该函数返回undefined而不是第n个元素。我不是在寻找答案,而是为什么它返回未定义。
编写一个名为“ getNthElementOfProperty”的函数。
给出一个对象和一个键,“ getNthElementOfProperty”返回位于给定键处的数组的第n个元素。
注意:
如果数组为空,则应返回undefined。 如果n超出范围,则应返回undefined。 如果给定键处的属性不是数组,则应返回undefined。 如果键上没有属性,则应返回undefined。 样本数据:
var obj = {
key: [1, 2, 6]
};
var output = getNthElementOfProperty(obj, 'key', 1);
console.log(output); // --> 2
function getNthElementOfProperty(obj, key, n) {
if(obj[key] === undefined){
return undefined
} else if(Array.isArray(obj[key]) === false){
return undefined
// otherwise if array empty
} else if(obj[key].length === 0){
return undefined
}
for(var e in obj[key]){
if(e === n){
return obj[key][e];
}
}
return undefined;
}
答案 0 :(得分:2)
只需删除循环。如果索引不在数组内,则JavaScript返回undefined
。您也可以摆脱if (array.length === 0)
,因为索引不能在长度为0的数组内。
function getNthElementOfProperty(obj, key, n) {
if(obj[key] === undefined){
return undefined
} else if(Array.isArray(obj[key]) === false){
return undefined
}
return obj[key][n];
}
如果您想知道循环为什么不起作用:
for (let i in array)
将索引作为字符串分配给i
。 ===
运算符检查类型,例如查看'0' !== 0
。
答案 1 :(得分:0)
结果是,我需要使用常规的for循环,而不是for循环。
*********Menu*********
1) - The biggest number :
9) - Exit :
Enter your choice please : 1
Option 1 :
The biggest number is => 89
*********Menu*********
1) - The biggest number :
9) - Exit :
Enter your choice please :
答案 2 :(得分:0)
具有所有验证功能的简单函数,无需循环,可以使用hasOwnProperty
代替obj[key] === undefined
function getNthElementOfProperty(obj, key, n) {
//validate obj and key and n
if (!obj || !key || isNaN(n)) {
return undefined;
// if key in not in Object
} else if (!obj.hasOwnProperty(key)) {
return undefined;
// if property at key is not a array
} else if (!Array.isArray(obj[key])) {
return undefined;
// if array is empty
} else if (!obj[key].length) {
return undefined;
// if n is greater than Array length
} else if (obj[key].length < n) {
return undefined;
} else {
return obj[key][n]
};
};