2017-02-09 3 views
0

私はオブジェクトの指定されたキーで配列のすべての数値の平均値を返すために、次の関数を書いている:私は前にif文を他の1以上を追加する必要がある以外はこのキー配列の値ですか?

var obj = { 
    key: [1, 2, 3] 
}; 
function getAverageOfElementsAtProperty(obj, key) { 
    if (!(key in obj)) { 
    return 0; 
    } else if (obj[key].length === 0) { 
    return 0; 
    } else { 
    var total = 0; 
    for (i = 0; i < obj[key].length; i++) { 
     total += obj[key][i]; 
    } 
    return total/(obj[key].length); 
    } 
} 
console.log(getAverageOfElementsAtProperty(obj, "key")); 

すべてが、大丈夫ですそのキーの値が配列かどうかを調べるelse文。そうでない場合、0を返すはずです。私はこれを行う方法を探しましたが、誰も働いていませんでした。 instanceof

答えて

4

var obj = { 
 
    k1: [1, 2, 3], 
 
    k2: null, 
 
    k3: "string", 
 
    k4: 5 
 
}; 
 

 
function getAverageOfElementsAtProperty(obj, key) { 
 
    if (!(obj[key] instanceof Array) || obj[key].length == 0) { 
 
    return 0; 
 
    } else { 
 
    var total = 0; 
 
    for (i = 0; i < obj[key].length; i++) { 
 
     total += obj[key][i]; 
 
    } 
 
    return total/(obj[key].length); 
 
    } 
 
} 
 
console.log(getAverageOfElementsAtProperty(obj, "k1")) 
 
console.log(getAverageOfElementsAtProperty(obj, "k2")) 
 
console.log(getAverageOfElementsAtProperty(obj, "k3")) 
 
console.log(getAverageOfElementsAtProperty(obj, "k4")) 
 
console.log(getAverageOfElementsAtProperty(obj, "k5"))

+0

グッドを使用することができます!あなたは合計を計算するために 'reduce'を使うことさえできます!! –

0

特定のプロパティが配列であるかどうか 'のinstanceof' 演算子を使用して、チェックしてください。

あなたの場合、以下の条件を追加してください。

else if(! (obj.key instanceof Array)) { 
return 0 
} 
0

あなたは方法を見ても、機能していないと言ったら、何を試してみましたか?

Array.isArray関数があり、ブール値を返します。

Array.isArray([]); // true 
0

あなたはArray.isArray(OBJ [キー])

var obj = { 
    key: [1, 2, 3] 
}; 

function getAverageOfElementsAtProperty(obj, key) { 

    if(!(key in obj)){ 
    return 0; 
    } 

    if(!Array.isArray(obj[key])){ 
    return 0; 
    } 

    if(obj[key].length === 0){ 
    return 0; 
    } 

    return obj[key].reduce(function(op1, op2){ 
     return op1 + op2; 
    }, 0)/obj[key].length 
} 
関連する問題