这是工作中的测试任务。
农夫养兔子。每只兔子都有自己的重量。当时机来临时,他杀死了他们的函数cut(rabbit)。你必须写一个函数的切割,使它有cut(rabbit1)(rabbit2)...(rabbitN)的外观,并推导出总质量和兔子的数目。
例如:
var rabbit1 = {weight: 5},
rabbit2 = {weight: 4};
console.log(cut(rabbit1)(rabbit2));在控制台里,我们将看到"9公斤的兔子或2片“。
JSFiddle - https://jsfiddle.net/sjao7ut8/
如何编写函数cut()
发布于 2016-06-06 09:16:34
您可以使用链接,这是一个fluent接口,它返回您调用的函数,直到环境需要一个原始值为止。
function cut(rabbit) {
var weight = 0,
count = 0,
fn = function (o) {
weight += o.weight;
count++;
return fn;
};
fn.toString = function () {
return weight + ' kg of rabbits or ' + count + ' piece' + (count > 1 ? 's' : '');
}
return fn(rabbit);
}
var rabbit1 = { weight: 5 },
rabbit2 = { weight: 4 };
console.log(cut(rabbit1)(rabbit2));
发布于 2016-06-06 09:10:48
这里您需要做的是使用递归调用,它返回一个函数并使用arguments.callee
像这样的事情应该能做好:
function cut(firstRabbit) {
var mass = firstRabbit.weight;
return function(nextRabbit) {
if (typeof nextRabbit !== 'undefined') {
mass += nextRabbit.weight;
return arguments.callee;
} else {
return mass;
}
};
}示例用法(请记住在末尾添加() ):
var rabbit1 = {weight: 5},
rabbit2 = {weight: 4};
console.log(cut(rabbit1)(rabbit2)());发布于 2016-06-06 10:55:08
您可以尝试使用以下代码:
var farmer = {
cut: function(rabits) {
var cutWeight = 10;
var totalCuts = 0;
var totalWeight = 0;
var count = rabits.length;
for(var i=0; i < count; i++) {
var rabit = rabits[i];
if(rabit.weight >= cutWeight) {
totalWeight += rabit.weight;
if(totalCuts === 0) {
totalCuts = 1;
}
else {
totalCuts += 1;
}
}
}
console.log(totalWeight + "Kg of Rabits and " + totalCuts + "cuts.")
}
};
farmer.cut([{weight: 11}, {weight: 5}, {weight: 13}]); // Call the function希望这能帮到你。
https://stackoverflow.com/questions/37653354
复制相似问题