2017-06-20 6 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

ため、この条件を試してみてください... ...ではないif文でループのためにそれを使用しよう: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を持たない場合は、これも空の配列を返します。

これは、このように実装することができる:Array.prototype.sliceに負の数を渡す

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

は端からアレイにアクセスします。スニペットでは、これは最初の要素からインデックスarr.length - 1まですべてを取ることを意味します。 arr.slice(-1)を使用する場合は、のみは、あなたが望むものとまったく反対の最後の要素(もちろん配列として)を返します。

0

私はあなたが-1を台無しに考えるあなたのif声明

if(i !== obj[key].length - 1){ 
      output.push(obj[key][i]); 
     } 
関連する問題