2017-06-20 28 views
1

我正在處理一個函數,該函數返回一個數組,其中包含除位於給定鍵上的數組的最後一個元素之外的所有元素。如果數組爲空,它應該返回一個空數組。
- 如果給定鍵的屬性不是數組,則返回一個空數組。
- 如果在鍵上沒有屬性,它應該返回一個空數組。獲取所有,但最後一個元素-JS

這裏是我的代碼:

function getAllButLastElementOfProperty(obj, key) { 
    var output = []; 

    if (key in obj && Array.isArray(obj[key]) && obj[key].length !== 0) 
    { 
     for(var i = 0; i < obj[key].length; i++){ 
      if(obj[key].length - 1){ 
       output.push(obj[key][i]); 
      } 

     } 
     return output; 
    } 
} 


var obj = { 
    key: [1, 2, 3] 
}; 
var output = getAllButLastElementOfProperty(obj, 'key'); 
console.log(output); // --> MUST RETURN [1,2] 

我的代碼返回[1,2,3]。

任何想法我做錯了什麼?

+0

我想你搞砸-1 ...儘量不要在if語句使用它在for循環...:d –

+0

'如果( obj [key] .length - 1){'總是返回true(除了0),所以可能錯誤在那裏 – Denny

回答

1

優化getAllButLastElementOfProperty功能版本:

function getAllButLastElementOfProperty(obj, k) { 
 
    if (!obj.hasOwnProperty(k) || !Array.isArray(obj[k]) || obj[k].length === 0) { 
 
     return []; 
 
    } 
 
    return obj[k].slice(0, -1); // getting all but the last element of the array 
 
} 
 

 
var obj = { key: [1, 2, 3] }, 
 
    output = getAllButLastElementOfProperty(obj, 'key'); 
 
    
 
console.log(output);

0

您可以通過使其採取數組作爲參數,然後調用getAllButLastElement(obj.key)概括你的函數。如果對象沒有屬性key,這也返回一個空數組。

這然後可以實現這樣的:

function getAllButLastElement(arr) { 
 
    if(!Array.isArray(arr)) 
 
    return []; // Return an empty array 
 

 
    return arr.slice(0, -1); 
 
} 
 

 
let obj = { 
 
    'key': [ 1, 2, 3 ], 
 
    'empty': [ ] 
 
}; 
 

 
console.log('obj.key:', getAllButLastElement(obj.key)); // Proper Array 
 
console.log('obj.empty:', getAllButLastElement(obj.empty)); // Empty Array 
 
console.log('obj.unknown:', getAllButLastElement(obj.unkown)); // Property does not exist

傳遞一個負數Array.prototype.slice訪問來自端陣列。在這段代碼中,這意味着我們從第一個元素到索引arr.length - 1。如果我們要使用arr.slice(-1)這將只有返回最後一個元素(仍然是一個當然的數組),這與你想要的完全相反。

0

試試這個條件你if聲明

if(i !== obj[key].length - 1){ 
      output.push(obj[key][i]); 
     } 
相關問題