欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

把列表里的所有值转换成一个值 - reduce《 Underscore 基础 》

Underscore 里面的 reduce 方法,可以把一个列表里面的所有的值,用你想要的方法换算成一个值。比如一个数字列表,你可以得到它们彼此相加的结果。

下面,我们使用这个方法去处理一下 numbers 这个数组 ...  让这个数组里的值彼此相加,返回这个相加之后的结果 ...

这个方法的第一个参数是要处理的列表,第二个参数是遍历器,或者叫迭代器,循环处理器 .. 第三个参数是存储结果的一个初始的状态 ... 最后有一个可选的 context 参数。

_.reduce  ...  先指定一下要处理的列表 .. 这里就是 numbers 这个数组 .. 第二个参数是迭代器 ... 用一个匿名函数 ...  第三个参数是存储结果的初始状态 ... 这里我们设置成 0  ...

在这个迭代器函数里面支持几个参数  ... 第一个参数表示当前结果,一般用 memo 来表示,第二个参数表示本次循环的列表里面的值 .. 第三个参数是 index ,如果处理的列表是个对象的话,这个参数就应该是 key ,最后一个参数表示列表本身 ...

这里我们只需要两个参数 .. memo 还有 number ...  number 列表 numbers 里面的一个数字。

然后在这个函数里面,返回处理的结果 ...  return  ... 用 memo 再加上 number  ...

_.reduce(numbers, function(memo, number){ return memo + number; }, 0)

回车 ... 得到的结果是 10 ...   迭代器首先会处理 numbers 里面的第一个项目,也就是数字 3 ,存储的结果的初始状态是 0 ,要处理的动作就是,让 memo 加上 number ,第一次就应该是 0 加上 3  ...  结果是 3 ...

然后继续第二次循环 .. 这里的 memo 就是上一次处理的结果,也就是 0 + 3 算出来的结果 ..  number 表示列表里面的第二个项目 ...  也就是数字 6  ...  然后用 3 加上 6 .. 再返回这个结果 ...  现在 memo 的值,就会是 9 了 ...

继续执行 ...  9 加上 numbers 里面的最后一个数字 1 ,结果就是这里显示的出来的数字 10  ...

对象

下面,我们再用这个方法去处理一个对象的属性  ...  先清理一下屏幕 ..  command + K

要处理的对象是 album  ... (#输入 album 回车)

要做的就是,把这个对象里的属性的名字和值连接到一块 ...  属性和名字之间用一个冒号 ...  不同的属性之间使用一个分号 ...

_.reduce  ... 要处理的东西是 album  ... 设置一下处理器 ... 用一个匿名函数  ...  memo 的初始值设置成一个空白的字符串 ...

这个处理器要接受 memo 参数,还有 value 和 key 参数,value 表示对象属性的值,key 表示对象属性的名字 ...

在这个处理器里面,返回 memo ,也就是当前存储结果 ... 加上对象属性的名字 ...  再连接一个冒号  ...  然后是属性的值  ... 用 value 表示 ... 最后是一个分号 ..

_.reduce(album, function(memo, value, key){ return memo + key + ':' + value + ';';}, '' )

回车 ...

得到的结果就是用我们设置的形式连接的对象里面的属性 ... 属性名和值之间有一个冒号,不同属性之间有一个分号 ..

普通分类: