排除 Reduce Function 问题
在本页面
reduce
function 是一个 JavaScript function,它在map-reduce操作期间“减少”到单个 object 与特定 key 关联的所有值。 reduce
function 必须满足各种要求。本教程有助于验证reduce
function 是否符合以下条件:reduce
function 必须_retject 一个 object,其类型必须与map
function 发出的value
的类型相同。valuesArray
中元素的 order 不应影响reduce
function 的输出。reduce
function 必须是幂等的。
您可以测试
reduce
function 返回的 value 与map
function 发出的 value 的类型相同。- 定义一个
reduceFunction1
function,它接受 argumentskeyCustId
和valuesPrices
。valuesPrices
是整数的 array:var reduceFunction1 = function(keyCustId, valuesPrices) {return Array.sum(valuesPrices);}; - 定义 sample array 整数:var myTestValues = [ 5, 5, 10 ];
- 使用
myTestValues
调用reduceFunction1
:reduceFunction1('myKey', myTestValues); - 验证
reduceFunction1
返回 integer:20 - 定义一个
reduceFunction2
function,它接受 argumentskeySKU
和valuesCountObjects
。valuesCountObjects
是包含两个字段count
和qty
的 array 文 档:var reduceFunction2 = function(keySKU, valuesCountObjects) {reducedValue = { count: 0, qty: 0 };for (var idx = 0; idx <; valuesCountObjects.length; idx++) {reducedValue.count += valuesCountObjects[idx].count;reducedValue.qty += valuesCountObjects[idx].qty;}return reducedValue;}; - 定义 sample array 文档:var myTestObjects = [{ count: 1, qty: 5 },{ count: 2, qty: 10 },{ count: 3, qty: 15 }];
- 使用
myTestObjects
调用reduceFunction2
:reduceFunction2('myKey', myTestObjects); - 验证
reduceFunction2
返回的文档中包含count
和qty
字段:{ "count" : 6, "qty" : 30 }
reduce
function 以key
和values
array 为参数。您可 以测试reduce
function 的结果不依赖于values
array 中元素的 order。- 定义 sample
values1
array 和 samplevalues2
array,它们只在 array 元素的 order 中有所不同:var values1 = [{ count: 1, qty: 5 },{ count: 2, qty: 10 },{ count: 3, qty: 15 }];var values2 = [{ count: 3, qty: 15 },{ count: 1, qty: 5 },{ count: 2, qty: 10 }]; - 定义一个
reduceFunction2
function,它接受 argumentskeySKU
和valuesCountObjects
。valuesCountObjects
是包含两个字段count
和qty
的 array 文档:var reduceFunction2 = function(keySKU, valuesCountObjects) {reducedValue = { count: 0, qty: 0 };for (var idx = 0; idx < valuesCountObjects.length; idx++) {reducedValue.count += valuesCountObjects[idx].count;reducedValue.qty += valuesCountObjects[idx].qty;}return reducedValue;}; - 先使用
values1
然后使用values2
调用reduceFunction2
:reduceFunction2('myKey', values1);reduceFunction2('myKey', values2); - 验证
reduceFunction2
返回相同的结果:{ "count" : 6, "qty" : 30 }
因为 map-reduce 操作可能会为同一个 key 多次调用
reduce
,并且不会为工作集中的 key 的单个实例调用reduce
,reduce
function 必须 return 与从该值发出的 value 相同类型的 value。 map
function。您可以测试reduce
function process“减少”值而不影响最终的 value。- 定义一个
reduceFunction2
function,它接受 argumentskeySKU
和valuesCountObjects
。valuesCountObjects
是包含两个字段count
和qty
的 array 文档:var reduceFunction2 = function(keySKU, valuesCountObjects) {reducedValue = { count: 0, qty: 0 };for (var idx = 0; idx <; valuesCountObjects.length; idx++) {reducedValue.count += valuesCountObjects[idx].count;reducedValue.qty += valuesCountObjects[idx].qty;}return reducedValue;}; - 定义 sample key:var myKey = 'myKey';
- 定义 sample
valuesIdempotent
array,其中包含一个调用reduceFunction2
function 的元素:var valuesIdempotent = [{ count: 1, qty: 5 },{ count: 2, qty: 10 },reduceFunction2(myKey, [ { count:3, qty: 15 } ] )]; - 定义一个 sample
values1
array,它结合了传递给reduceFunction2
的值:var values1 = [{ count: 1, qty: 5 },{ count: 2, qty: 10 },{ count: 3, qty: 15 }]; - 首先使用
myKey
和valuesIdempotent
调用reduceFunction2
,然后使用myKey
和values1
调用reduceFunction2
:reduceFunction2(myKey, valuesIdempotent);reduceFunction2(myKey, values1); - 验证
reduceFunction2
返回相同的结果:{ "count" : 6, "qty" : 30 }
译者:李冠飞
校对:
最近更新 1yr ago