函数getElementOfArrayProperty()工作但无法通过测试

时间:2017-03-16 03:32:58

标签: javascript arrays

我正在解决以下练习问题,但我一直收到错误。

问题:
编写一个名为" 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。

有谁能看到发生了什么?

2 个答案:

答案 0 :(得分:1)

我猜这个代码是问题!obj[key][index]。从我所看到的,它期待0。违规代码会将0的值视为false,然后使其返回undefined

更改该代码以明确检查nullundefined

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