无法使用 Reduce 读取未定义的 属性
Cannot Read Property of Undefined using Reduce
我有一个带有销售数字的对象,想获得 return 最高卖家的名称和销售额,但我一直收到无法读取 属性 of undefined 的错误:
var salesTeam = [{name: {first: 'aleen', last: 'atkins'}, age: 26, sales: '14'},
{name: {first: 'alvaro', last: 'angelos'}, age: 55, sales: '68'},
{name: {first: 'denese', last: 'dossett'}, age: 29, sales: '48'},
{name: {first: 'douglas', last: 'denney'}, age: 53, sales: '58'},
{name: {first: 'earline', last: 'erickson'}, age: 19, sales: '876'},
{name: {first: 'herman', last: 'hazell'}, age: 25, sales: '46'},
{name: {first: 'homer', last: 'hirth'}, age: 26, sales: '4'},
{name: {first: 'hwa', last: 'heidt'}, age: 53, sales: '07'},
{name: {first: 'hyon', last: 'hampshire'}, age: 46, sales: '598'},
{name: {first: 'issac', last: 'ingerson'}, age: 45, sales: '25'},
{name: {first: 'jeraldine', last: 'joplin'}, age: 39, sales: '91'},
{name: {first: 'jin', last: 'jeffrey'}, age: 17, sales: '402'},
{name: {first: 'joleen', last: 'jolin'}, age: 45, sales: '736'},
{name: {first: 'jude', last: 'jarrett'}, age: 53, sales: '57'},
{name: {first: 'magda', last: 'mireles'}, age: 18, sales: '98'},
{name: {first: 'mistie', last: 'montealegre'}, age: 31, sales: '20'},
{name: {first: 'nancy', last: 'napoli'}, age: 49, sales: '55'},
{name: {first: 'regine', last: 'rohrbaugh'}, age: 33, sales: '81'},
{name: {first: 'rolando', last: 'riebel'}, age: 35, sales: '73'},
{name: {first: 'scarlett', last: 'stagg'}, age: 36, sales: '26'},
{name: {first: 'sherron', last: 'strawn'}, age: 36, sales: '48'},
{name: {first: 'susan', last: 'shilling'}, age: 29, sales: '42'},
{name: {first: 'tama', last: 'tworek'}, age: 16, sales: '00'},
{name: {first: 'tonisha', last: 'taunton'}, age: 41, sales: '19'},
{name: {first: 'vergie', last: 'villescas'}, age: 25, sales: '12'}];
var highestEarner = function (companies) {
var ret = companies.reduce(function(acc,element,i){
if (parseInt(element['sales'].slice(1)) > acc['sales']){
acc['sales'] = element['sales'];
acc['name'] = element['name']['first'] +" "+ element['name']['last'];
}
},{sales: 0, name: ''});
return ret;
};
console.log(highestEarner(salesTeam));
您需要在每次迭代中 return 累加器,即您在 if {...}
之后缺少 return acc
。此外,您将货币格式的值分配给 acc['sales']
因此您也需要 slice
和 parseInt
(或者只存储数值)...
const salesTeam = [{"name":{"first":"aleen","last":"atkins"},"age":26,"sales":"14"},{"name":{"first":"alvaro","last":"angelos"},"age":55,"sales":"68"},{"name":{"first":"denese","last":"dossett"},"age":29,"sales":"48"},{"name":{"first":"douglas","last":"denney"},"age":53,"sales":"58"},{"name":{"first":"earline","last":"erickson"},"age":19,"sales":"876"},{"name":{"first":"herman","last":"hazell"},"age":25,"sales":"46"},{"name":{"first":"homer","last":"hirth"},"age":26,"sales":"4"},{"name":{"first":"hwa","last":"heidt"},"age":53,"sales":"07"},{"name":{"first":"hyon","last":"hampshire"},"age":46,"sales":"598"},{"name":{"first":"issac","last":"ingerson"},"age":45,"sales":"25"},{"name":{"first":"jeraldine","last":"joplin"},"age":39,"sales":"91"},{"name":{"first":"jin","last":"jeffrey"},"age":17,"sales":"402"},{"name":{"first":"joleen","last":"jolin"},"age":45,"sales":"736"},{"name":{"first":"jude","last":"jarrett"},"age":53,"sales":"57"},{"name":{"first":"magda","last":"mireles"},"age":18,"sales":"98"},{"name":{"first":"mistie","last":"montealegre"},"age":31,"sales":"20"},{"name":{"first":"nancy","last":"napoli"},"age":49,"sales":"55"},{"name":{"first":"regine","last":"rohrbaugh"},"age":33,"sales":"81"},{"name":{"first":"rolando","last":"riebel"},"age":35,"sales":"73"},{"name":{"first":"scarlett","last":"stagg"},"age":36,"sales":"26"},{"name":{"first":"sherron","last":"strawn"},"age":36,"sales":"48"},{"name":{"first":"susan","last":"shilling"},"age":29,"sales":"42"},{"name":{"first":"tama","last":"tworek"},"age":16,"sales":"00"},{"name":{"first":"tonisha","last":"taunton"},"age":41,"sales":"19"},{"name":{"first":"vergie","last":"villescas"},"age":25,"sales":"12"}];
var highestEarner = function (companies) {
var ret = companies.reduce(function(acc,element) {
let currentSales = parseInt(element.sales.slice(1))
if (currentSales > acc.sales) {
acc.sales = currentSales;
acc.name = `${element.name.first} ${element.name.last}`
}
return acc;
},{sales: 0, name: ''});
return ret;
};
console.log(highestEarner(salesTeam));
使用 reducer 的简单规则是,无论数组中每个元素的数据格式如何,请确保返回相同的格式,包括每个 运行 中的所有元素,以便它可以使用返回值作为下一个 运行.
的累加器 (acc)
我从下面学到的一个简单错误:
这解决了问题。
我有一个带有销售数字的对象,想获得 return 最高卖家的名称和销售额,但我一直收到无法读取 属性 of undefined 的错误:
var salesTeam = [{name: {first: 'aleen', last: 'atkins'}, age: 26, sales: '14'},
{name: {first: 'alvaro', last: 'angelos'}, age: 55, sales: '68'},
{name: {first: 'denese', last: 'dossett'}, age: 29, sales: '48'},
{name: {first: 'douglas', last: 'denney'}, age: 53, sales: '58'},
{name: {first: 'earline', last: 'erickson'}, age: 19, sales: '876'},
{name: {first: 'herman', last: 'hazell'}, age: 25, sales: '46'},
{name: {first: 'homer', last: 'hirth'}, age: 26, sales: '4'},
{name: {first: 'hwa', last: 'heidt'}, age: 53, sales: '07'},
{name: {first: 'hyon', last: 'hampshire'}, age: 46, sales: '598'},
{name: {first: 'issac', last: 'ingerson'}, age: 45, sales: '25'},
{name: {first: 'jeraldine', last: 'joplin'}, age: 39, sales: '91'},
{name: {first: 'jin', last: 'jeffrey'}, age: 17, sales: '402'},
{name: {first: 'joleen', last: 'jolin'}, age: 45, sales: '736'},
{name: {first: 'jude', last: 'jarrett'}, age: 53, sales: '57'},
{name: {first: 'magda', last: 'mireles'}, age: 18, sales: '98'},
{name: {first: 'mistie', last: 'montealegre'}, age: 31, sales: '20'},
{name: {first: 'nancy', last: 'napoli'}, age: 49, sales: '55'},
{name: {first: 'regine', last: 'rohrbaugh'}, age: 33, sales: '81'},
{name: {first: 'rolando', last: 'riebel'}, age: 35, sales: '73'},
{name: {first: 'scarlett', last: 'stagg'}, age: 36, sales: '26'},
{name: {first: 'sherron', last: 'strawn'}, age: 36, sales: '48'},
{name: {first: 'susan', last: 'shilling'}, age: 29, sales: '42'},
{name: {first: 'tama', last: 'tworek'}, age: 16, sales: '00'},
{name: {first: 'tonisha', last: 'taunton'}, age: 41, sales: '19'},
{name: {first: 'vergie', last: 'villescas'}, age: 25, sales: '12'}];
var highestEarner = function (companies) {
var ret = companies.reduce(function(acc,element,i){
if (parseInt(element['sales'].slice(1)) > acc['sales']){
acc['sales'] = element['sales'];
acc['name'] = element['name']['first'] +" "+ element['name']['last'];
}
},{sales: 0, name: ''});
return ret;
};
console.log(highestEarner(salesTeam));
您需要在每次迭代中 return 累加器,即您在 if {...}
之后缺少 return acc
。此外,您将货币格式的值分配给 acc['sales']
因此您也需要 slice
和 parseInt
(或者只存储数值)...
const salesTeam = [{"name":{"first":"aleen","last":"atkins"},"age":26,"sales":"14"},{"name":{"first":"alvaro","last":"angelos"},"age":55,"sales":"68"},{"name":{"first":"denese","last":"dossett"},"age":29,"sales":"48"},{"name":{"first":"douglas","last":"denney"},"age":53,"sales":"58"},{"name":{"first":"earline","last":"erickson"},"age":19,"sales":"876"},{"name":{"first":"herman","last":"hazell"},"age":25,"sales":"46"},{"name":{"first":"homer","last":"hirth"},"age":26,"sales":"4"},{"name":{"first":"hwa","last":"heidt"},"age":53,"sales":"07"},{"name":{"first":"hyon","last":"hampshire"},"age":46,"sales":"598"},{"name":{"first":"issac","last":"ingerson"},"age":45,"sales":"25"},{"name":{"first":"jeraldine","last":"joplin"},"age":39,"sales":"91"},{"name":{"first":"jin","last":"jeffrey"},"age":17,"sales":"402"},{"name":{"first":"joleen","last":"jolin"},"age":45,"sales":"736"},{"name":{"first":"jude","last":"jarrett"},"age":53,"sales":"57"},{"name":{"first":"magda","last":"mireles"},"age":18,"sales":"98"},{"name":{"first":"mistie","last":"montealegre"},"age":31,"sales":"20"},{"name":{"first":"nancy","last":"napoli"},"age":49,"sales":"55"},{"name":{"first":"regine","last":"rohrbaugh"},"age":33,"sales":"81"},{"name":{"first":"rolando","last":"riebel"},"age":35,"sales":"73"},{"name":{"first":"scarlett","last":"stagg"},"age":36,"sales":"26"},{"name":{"first":"sherron","last":"strawn"},"age":36,"sales":"48"},{"name":{"first":"susan","last":"shilling"},"age":29,"sales":"42"},{"name":{"first":"tama","last":"tworek"},"age":16,"sales":"00"},{"name":{"first":"tonisha","last":"taunton"},"age":41,"sales":"19"},{"name":{"first":"vergie","last":"villescas"},"age":25,"sales":"12"}];
var highestEarner = function (companies) {
var ret = companies.reduce(function(acc,element) {
let currentSales = parseInt(element.sales.slice(1))
if (currentSales > acc.sales) {
acc.sales = currentSales;
acc.name = `${element.name.first} ${element.name.last}`
}
return acc;
},{sales: 0, name: ''});
return ret;
};
console.log(highestEarner(salesTeam));
使用 reducer 的简单规则是,无论数组中每个元素的数据格式如何,请确保返回相同的格式,包括每个 运行 中的所有元素,以便它可以使用返回值作为下一个 运行.
的累加器 (acc)我从下面学到的一个简单错误:
这解决了问题。