2017-03-16 51 views
0

我正在處理以下練習問題,但不斷收到錯誤。函數getElementOfArrayProperty()正常工作但無法通過測試

問:
寫了一個名爲 「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

? 「預期未定義爲0」。意味着您不會顯示的其他一些輸入數據的測試。我不認爲你有權訪問失敗的輸入? – nnnnnn

+0

你給循環中的'element'分配了相同的值 - 這不是你的問題,但它很愚蠢,代碼爲 –

+0

顯然這是在某些測試環境中,你根本沒有提及或描述的事實 - 因爲'should_return_the_element_at_the_key_of_the_passed_in_object'是特定於您的環境 –

回答

0

我的猜測是這個代碼是問題!obj[key][index]。從我所看到的情況來看,它預計爲0。有問題的代碼會將0的值視爲false,然後使其返回undefined

更改代碼到你爲什麼要使用一個循環顯式檢查nullundefined

obj[key][index] == null 
+0

欣賞幫助。弄清楚了! – jalexyep

0

我認爲這個問題是在這條線:

if (!obj[key] || !obj[key][index] || Array.isArray(obj[key]) === false) 

...特別是!obj[key][index]部分。

你是不是測試只是不確定的因素存在,你還測試與錯誤值定義的元素如空字符串,null,或數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超出範圍,則它將評估爲undefined

+0

欣賞幫助。弄清楚了! – jalexyep

+0

不客氣。我只是編輯了我的答案,提供了一個相當短的實現。 – nnnnnn

+0

是的,我回頭看原始代碼,並意識到它是多麼不必要! – jalexyep