2017-02-09 2 views
0

Я написал следующую функцию, чтобы вернуть среднее значение всех чисел массива в заданном ключе в объекте:- это значение в этом ключе массива?

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. Я искал способы сделать это, но никто из них не работал.

ответ

4

С instanceof:

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

Хорошо! Вы даже можете использовать 'сокращение', чтобы вычислить общее количество !! –

0

Чтобы проверить, является ли конкретное имущество является массивом или нет, используйте 'InstanceOf' оператор.

В вашем случае добавьте условие ниже.

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 
} 
Смежные вопросы