我需要帮助将我的两个 JS 函数重构为我代码中的一个多功能函数 (JS array.reduce)
I need help refactoring my two JS functions into one versatile function in my code (JS array.reduce)
我的目标是在数组中找到 "total number of something"。
例如此数组 "arrayOfBikes" 中的每个对象都有一个 "free" 属性,我想找到总数"free" 的值。
我正在努力减少我编写的代码量。
是否可以编写一个函数,它接受一个数组和一个项目来计算(免费或自行车)我一直在尝试在下面实现它,但我 运行 遇到了错误 "getTotalNumberOfBikes()"
var arrayOfBikes = [
{name: "blackhall", lat: 53.3488, lng: -6.281637, free: 22, bikes: 8},
{name: "mbrown", lat: 53.341645, lng: -6.29719, free: 14, bikes: 8},
{name: "grant street", lat: 53.334123, lng: -6.265436, free: 3, bikes: 27},
{name: "gratstreet", lat: 53.339629, lng: -6.243778, free: 19, bikes: 4},
{name: "hardstreet", lat: 53.355473, lng: -6.264423, free: 14, bikes: 2}
];
function getTotalNumberOfFreeBikes(_array){
let arrayOfFreeBikes = [];
_array.forEach(function(element){
arrayOfFreeBikes.push(element.free);
});
return arrayOfFreeBikes.reduce(function(_previousValue, _currentValue){
return _previousValue + _currentValue;
}, 0);
}
function getTotalNumberOfBikes(_array){
let arrayOfBikes = [];
_array.forEach(function(element){
arrayOfBikes.push(element.bikes);
});
return arrayOfBikes.reduce(function(_previousValue, _currentValue){
return _previousValue + _currentValue;
}, 0);
}//getTotalNumberOfBikes
document.getElementById('freeBikes').innerHTML = 'Total free bikes : ' + getTotalNumberOfFreeBikes(arrayOfBikes);
document.getElementById('Bikes').innerHTML = 'Total bikes : ' + getTotalNumberOfBikes(arrayOfBikes);
function getTotalNumberOfBikes(_array, _item){
let arrayOfBikes = [], itemToCount = _array._item;
_array.forEach(function(element){
arrayOfBikes.push(itemToCount);
});
return arrayOfBikes.reduce(function(_previousValue, _currentValue){
return _previousValue + _currentValue;
}, 0);
}//getTotalNumberOfBikes
Reduce 非常适合这个:
var count = arrayOfBikes.reduce((acc, curr) => acc + curr.free, 0)
如果你想概括它,你可以这样做:
function getCountOf(array, prop) {
return array.reduce((acc, curr) => acc + curr[prop], 0)
}
console.log(getCountOf(arrayOfBikes, 'free'))
// 72
console.log(getCountOf(arrayOfBikes, 'bikes'))
// 49
我的目标是在数组中找到 "total number of something"。
例如此数组 "arrayOfBikes" 中的每个对象都有一个 "free" 属性,我想找到总数"free" 的值。
我正在努力减少我编写的代码量。
是否可以编写一个函数,它接受一个数组和一个项目来计算(免费或自行车)我一直在尝试在下面实现它,但我 运行 遇到了错误 "getTotalNumberOfBikes()"
var arrayOfBikes = [
{name: "blackhall", lat: 53.3488, lng: -6.281637, free: 22, bikes: 8},
{name: "mbrown", lat: 53.341645, lng: -6.29719, free: 14, bikes: 8},
{name: "grant street", lat: 53.334123, lng: -6.265436, free: 3, bikes: 27},
{name: "gratstreet", lat: 53.339629, lng: -6.243778, free: 19, bikes: 4},
{name: "hardstreet", lat: 53.355473, lng: -6.264423, free: 14, bikes: 2}
];
function getTotalNumberOfFreeBikes(_array){
let arrayOfFreeBikes = [];
_array.forEach(function(element){
arrayOfFreeBikes.push(element.free);
});
return arrayOfFreeBikes.reduce(function(_previousValue, _currentValue){
return _previousValue + _currentValue;
}, 0);
}
function getTotalNumberOfBikes(_array){
let arrayOfBikes = [];
_array.forEach(function(element){
arrayOfBikes.push(element.bikes);
});
return arrayOfBikes.reduce(function(_previousValue, _currentValue){
return _previousValue + _currentValue;
}, 0);
}//getTotalNumberOfBikes
document.getElementById('freeBikes').innerHTML = 'Total free bikes : ' + getTotalNumberOfFreeBikes(arrayOfBikes);
document.getElementById('Bikes').innerHTML = 'Total bikes : ' + getTotalNumberOfBikes(arrayOfBikes);
function getTotalNumberOfBikes(_array, _item){
let arrayOfBikes = [], itemToCount = _array._item;
_array.forEach(function(element){
arrayOfBikes.push(itemToCount);
});
return arrayOfBikes.reduce(function(_previousValue, _currentValue){
return _previousValue + _currentValue;
}, 0);
}//getTotalNumberOfBikes
Reduce 非常适合这个:
var count = arrayOfBikes.reduce((acc, curr) => acc + curr.free, 0)
如果你想概括它,你可以这样做:
function getCountOf(array, prop) {
return array.reduce((acc, curr) => acc + curr[prop], 0)
}
console.log(getCountOf(arrayOfBikes, 'free'))
// 72
console.log(getCountOf(arrayOfBikes, 'bikes'))
// 49