javascript - 无法使用 Reduce 读取未定义的属性

标签 javascript higher-order-functions

我有一个带有销售数字的对象,想要返回最高卖家的名称和销售额,但我一直收到无法读取未定义属性的错误:

var salesTeam = [{name: {first: 'aleen', last: 'atkins'}, age: 26, sales: '$2314'},
        {name: {first: 'alvaro', last: 'angelos'}, age: 55, sales: '$1668'},
        {name: {first: 'denese', last: 'dossett'}, age: 29, sales: '$9248'},
        {name: {first: 'douglas', last: 'denney'}, age: 53, sales: '$5058'},
        {name: {first: 'earline', last: 'erickson'}, age: 19, sales: '$18876'},
        {name: {first: 'herman', last: 'hazell'}, age: 25, sales: '$2746'},
        {name: {first: 'homer', last: 'hirth'}, age: 26, sales: '$474'},
        {name: {first: 'hwa', last: 'heidt'}, age: 53, sales: '$9607'},
        {name: {first: 'hyon', last: 'hampshire'}, age: 46, sales: '$13598'},
        {name: {first: 'issac', last: 'ingerson'}, age: 45, sales: '$5225'},
        {name: {first: 'jeraldine', last: 'joplin'}, age: 39, sales: '$2891'},
        {name: {first: 'jin', last: 'jeffrey'}, age: 17, sales: '$14402'},
        {name: {first: 'joleen', last: 'jolin'}, age: 45, sales: '$15736'},
        {name: {first: 'jude', last: 'jarrett'}, age: 53, sales: '$7557'},
        {name: {first: 'magda', last: 'mireles'}, age: 18, sales: '$1498'},
        {name: {first: 'mistie', last: 'montealegre'}, age: 31, sales: '$6920'},
        {name: {first: 'nancy', last: 'napoli'}, age: 49, sales: '$5255'},
        {name: {first: 'regine', last: 'rohrbaugh'}, age: 33, sales: '$7881'},
        {name: {first: 'rolando', last: 'riebel'}, age: 35, sales: '$8573'},
        {name: {first: 'scarlett', last: 'stagg'}, age: 36, sales: '$7126'},
        {name: {first: 'sherron', last: 'strawn'}, age: 36, sales: '$8848'},
        {name: {first: 'susan', last: 'shilling'}, age: 29, sales: '$8542'},
        {name: {first: 'tama', last: 'tworek'}, age: 16, sales: '$9200'},
        {name: {first: 'tonisha', last: 'taunton'}, age: 41, sales: '$5219'},
        {name: {first: 'vergie', last: 'villescas'}, age: 25, sales: '$8712'}];

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));

最佳答案

您需要在每次迭代中返回累加器,即您在 if {...} 之后缺少 return acc。此外,您将货币格式的值分配给 acc['sales'] 因此您也需要 sliceparseInt (或者只存储数值)...

const salesTeam = [{"name":{"first":"aleen","last":"atkins"},"age":26,"sales":"$2314"},{"name":{"first":"alvaro","last":"angelos"},"age":55,"sales":"$1668"},{"name":{"first":"denese","last":"dossett"},"age":29,"sales":"$9248"},{"name":{"first":"douglas","last":"denney"},"age":53,"sales":"$5058"},{"name":{"first":"earline","last":"erickson"},"age":19,"sales":"$18876"},{"name":{"first":"herman","last":"hazell"},"age":25,"sales":"$2746"},{"name":{"first":"homer","last":"hirth"},"age":26,"sales":"$474"},{"name":{"first":"hwa","last":"heidt"},"age":53,"sales":"$9607"},{"name":{"first":"hyon","last":"hampshire"},"age":46,"sales":"$13598"},{"name":{"first":"issac","last":"ingerson"},"age":45,"sales":"$5225"},{"name":{"first":"jeraldine","last":"joplin"},"age":39,"sales":"$2891"},{"name":{"first":"jin","last":"jeffrey"},"age":17,"sales":"$14402"},{"name":{"first":"joleen","last":"jolin"},"age":45,"sales":"$15736"},{"name":{"first":"jude","last":"jarrett"},"age":53,"sales":"$7557"},{"name":{"first":"magda","last":"mireles"},"age":18,"sales":"$1498"},{"name":{"first":"mistie","last":"montealegre"},"age":31,"sales":"$6920"},{"name":{"first":"nancy","last":"napoli"},"age":49,"sales":"$5255"},{"name":{"first":"regine","last":"rohrbaugh"},"age":33,"sales":"$7881"},{"name":{"first":"rolando","last":"riebel"},"age":35,"sales":"$8573"},{"name":{"first":"scarlett","last":"stagg"},"age":36,"sales":"$7126"},{"name":{"first":"sherron","last":"strawn"},"age":36,"sales":"$8848"},{"name":{"first":"susan","last":"shilling"},"age":29,"sales":"$8542"},{"name":{"first":"tama","last":"tworek"},"age":16,"sales":"$9200"},{"name":{"first":"tonisha","last":"taunton"},"age":41,"sales":"$5219"},{"name":{"first":"vergie","last":"villescas"},"age":25,"sales":"$8712"}];

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));

关于javascript - 无法使用 Reduce 读取未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43730555/

相关文章:

javascript - JS - 通过对象的属性之一调用对象

javascript - 为什么 Axios(带有 async/await)返回一个完整的 promise?

javascript - 如何从 url 字符串中删除特定值

javascript - FullCalendar - 根据事件标准每天显示图标

javascript - 选择选择选项时将数据加载到 div

typescript - 为 TypeScript 中的重载捕获传递函数的泛型类型

php - 在 PHP 中,过滤关联数组的数组

scala - 这种语法叫什么? Scala 文档在哪里解释了它?

javascript - Angular 5 和 jQuery 插件覆盖了 DOM

javascript - 当普通函数返回相同结果时,为什么要使用高阶函数?