2017-12-05 23 views
0

私は、次の要件を満たすために関数を記述しようとしています:通常のforループとfor ... forの違いは?

は、オブジェクトとキーを考えると、「getElementsThatEqual10AtProperty」は10に等しく与えられたキーに位置配列のすべての要素を含む配列を返します。 。

注:

  • 配列が空の場合、それは空の配列を返す必要があります。
  • 配列に要素が10個含まれていない場合は、空の配列 を返します。
  • 指定されたキーのプロパティが配列でない場合は、配列 を返します。
  • キーにプロパティがない場合は、空の配列が返されます。

例:

var obj = { 
    key: [1000, 10, 50, 10] 
}; 
var output = getElementsThatEqual10AtProperty(obj, 'key'); 
console.log(output); // --> [10, 10] 

アプローチ#1(キーでないプロパティがない場合、それは空の配列を返す必要があり、最終的なポイント*を失敗する。):

function getElementsThatEqual10AtProperty(obj, key) { 

    var output = []; 
    for (var i = 0; i < obj[key].length; i++) { 
    if (obj[key][i] === 10) { 
     output.push(obj[key][i]); 
    } 
    } 
return output; 
} 

アプローチ#2すべてを渡す:

function getElementsThatEqual10AtProperty(obj, key) { 

    var output = []; 
    for (let i in obj[key]) { 
    if (obj[key][i] === 10) { 
     output.push(obj[key][i]); 
    } 
    } 
    return output; 
} 

私の理解から、ループと後続の条件付きプッシュは同じ論理を有する。なぜ、他のものよりもうまくいくのですか?

+0

https://stackoverflow.com/questions/5263847/javascript-loops-for-in-vs-for – epascarello

答えて

1

これは、必要以上に複雑にしています。私はこれを行うだけです:

function getSameVals(yourArray, val){ 
    var a = []; 
    for(var i=0,l=yourArray.length; i<l; i++){ 
    if(yourArray[i] === val){ 
     a.push(val); 
    } 
    } 
    return a; 
} 
var ten = getSameVals(obj.key, 10); 
console.log(ten); 
関連する問題