gpt4 book ai didi

javascript - 当对象属性不存在时返回值

转载 作者:行者123 更新时间:2023-11-28 14:42:01 24 4
gpt4 key购买 nike

对我的代码运行测试。如果传递给函数的属性不存在,则应返回 0。但它没有返回任何东西。我是不是打错字了?

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

function getAverageOfElementsAtProperty(obj, key) {
if (obj[key].length === 0 || Array.isArray(obj[key]) === false || obj.hasOwnProperty(key) === false) {
return 0;
}
var average = 0;
for (var i = 0; i < obj[key].length; i++) {
average += obj[key][i];
}
average /= obj[key].length;
return average;
}

console.log(getAverageOfElementsAtProperty(obj, 'notKey'));

最佳答案

如果您没有将数组传递给函数,则当它尝试获取所传递对象的length 时,它会失败,因此这不应该是您最初测试的方式。您只需要查看该属性是否存在,只需尝试在 if 条件下访问该属性即可完成此操作。

现在,如果您要添加测试来查看该属性是否存在并且它是一个数组,那么您必须添加更多测试来检查数组中的项目以查看它们是否是数字,否则尝试获得数值平均值将会失败。

由于实际上有两件事要做(检查属性是否存在并获取数学平均值),因此我会将其分解为两个函数:

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

var obj2 = {
key: [1, "test", 3]
};

function getAverageOfElementsAtProperty(obj, key) {
if (obj[key] && Array.isArray(obj[key])) {
// Ok, we have the right property and there is an array there,
// now we have to test that each item in the array is a number
var numbers = obj[key].every(function (currentValue) {
return typeof currentValue === "number";
});

// Return the average if we have all numbers or 0 if not
return numbers ? getAverage(obj[key]) : 0;
} else {
return 0;
}
}

function getAverage(arr){
var average = 0;
// Array.forEach() is much simpler than counting loops
arr.forEach(function(item) {
average += item;
});
return average / arr.length;
}

console.log(getAverageOfElementsAtProperty(obj1, 'notkey')); // 0
console.log(getAverageOfElementsAtProperty(obj1, 'key')); // 2
console.log(getAverageOfElementsAtProperty(obj2, 'key')); // 0 - obj2 does not contain all numbers

关于javascript - 当对象属性不存在时返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47723789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com