繁体   English   中英

下划线将返回的备忘录减少为未识别

[英]Underscore reduce returning memo as unidentified

我正在尝试学习Underscore.js的基础知识,更确切地说,是reduce方法。 作为基本练习(在Pluralsight上的视频之后),我从数组中获取多个值,然后尝试将它们简化为单个值。

我敢肯定,一旦弄清楚,这会让我讨厌自己,但是尽管我尽了最大努力,但此刻我还是无法使它工作-我的“ memo”值始终返回为undefined。

编码:

log = function (input) { console.log(input); }

var data = {
    people: [
        { name: "Craig", state: "Alive", price: 100 },
        { name: "Bob", state: "Dead", price: 200 },
        { name: "Todd", state: "Dead", price: 300 },
        { name: "Cog", state: "Alive", price: 400 }
    ]
    };

   var total = _.reduce(data.people,
                        function( memo, value ) {
                            console.log('Memo price: ' + memo.price);
                            console.log('Value price: ' + value.price);
                            return { totalPrice: (memo.price + value.price) }; 
                        }, 0);

log("Total price: " + total);

结果:value.price返回预期的值(100、200、300、400)memo.price返回为“未定义”,因此合计仅作为对象返回

初始备注值(减少的第三个参数),传递给迭代器函数的第一个参数以及迭代器返回的值都应相互兼容。 但:

  • 您的初始值只是一个普通数字( 0
  • 您期望迭代器函数的第一个参数是一个对象{price: <a number>}
  • 您返回一个对象{totalPrice: <a number>}

要解决此问题,您只需要保持一致即可。 例如,在所有三种情况下都可以使用纯数字:

_.reduce(data.people,
  function( memo, value ) {
      console.log('Memo price: ' + memo);
      console.log('Value price: ' + value.price);
      return memo + value.price; 
  }, 0);

或者您可以在所有三种情况下使用{price: <a number>}对象:

_.reduce(data.people,
  function( memo, value ) {
      console.log('Memo price: ' + memo.price);
      console.log('Value price: ' + value.price);
      return {price: memo.price + value.price}; 
  }, {price: 0});

小提琴

log = function (input) { console.log(input); }

var data = {
    people: [
        { name: "Craig", state: "Alive", price: 100 },
        { name: "Bob", state: "Dead", price: 200 },
        { name: "Todd", state: "Dead", price: 300 },
        { name: "Cog", state: "Alive", price: 400 }
    ]
    };

   var total = _.reduce(data.people,
                        function( memo, value ) {
                            console.log('Memo price: ' + memo.price);
                            console.log('Value price: ' + value.price);
                            return memo + value.price; 
                        }, 0);

log("Total price: " + total);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM