我正在解决以下练习问题,但我一直收到错误。
问题:
编写一个名为" getElementOfArrayProperty"。
给定一个对象,一个键和一个数字索引," getElementOfArrayProperty"返回位于给定键的给定对象内的数组的给定索引处的元素值。
注意:
*如果数组为空,则应返回undefined。
*如果给定索引超出位于给定键的数组的范围,则应返回undefined
*如果给定键的属性不是数组,则应返回undefined
*如果密钥没有属性,则应返回undefined。
function getElementOfArrayProperty(obj, key, index) {
var element = '';
if (!obj[key] || !obj[key][index] || Array.isArray(obj[key]) === false) {
return undefined;
} else {
for (var i = 0; i < obj[key].length; i ++) {
element = obj[key][index];
}
}
return element;
}
var obj = {
key: ['Jamil', 'Albrey', 'jones', 'justin']
};
getElementOfArrayProperty(obj, 'key', 3);
我的代码返回正确的索引值,但我不断收到以下错误:
should_return_the_element_at_the_index_of_the_array_at_the_key_of_the_passed_in_object
应该返回传入对象的键的数组索引处的元素
预期未定义为0。
有谁能看到发生了什么?
答案 0 :(得分:1)
我猜这个代码是问题!obj[key][index]
。从我所看到的,它期待0
。违规代码会将0
的值视为false
,然后使其返回undefined
。
更改该代码以明确检查null
和undefined
值
obj[key][index] == null
答案 1 :(得分:0)
我认为问题出在这一行:
if (!obj[key] || !obj[key][index] || Array.isArray(obj[key]) === false)
...特别是!obj[key][index]
部分。
你没有测试只是那里的未定义元素,你也在测试具有错误值的已定义元素,例如空字符串,null
或数字{{1} }。
这就是为什么测试错误说“预期未定义为0。”。您的代码错误地将0
标识为未定义的值。
我认为您可以简化这样的功能:
0
一旦你知道function getElementOfArrayProperty(obj, key, index) {
return !Array.isArray(obj[key]) ? undefined : obj[key][index];
}
console.log( getElementOfArrayProperty({ key: ['Jamil', 'Albrey', 'jones', 'justin'] }, 'key', 3) );
console.log( getElementOfArrayProperty({ key: 'not an array' }, 'key', 3) );
console.log( getElementOfArrayProperty({ key: [0, 0, 0, 0] }, 'key', 3) );
console.log( getElementOfArrayProperty({ key: ['outofbounds'] }, 'key', 3) );
实际上是一个数组,你可以直接测试而不首先测试是否定义了obj[key]
,你可以返回obj[key]
,因为如果数组为空或者obj[key][index]
超出范围,将评估为index
。