问题描述
最近我收到了一个不同版本的“fizzbuzz 问题”,要求您这样做:
实现函数fizzBuzz(n,conditions)
其中 n 是整数,条件是 key: value (number: string) 的映射
您需要运行从 1 到 n 的所有数字,并且对于每个数字,您需要检查它满足哪些条件,如果不满足,则打印数字,但如果满足条件 X,则可以从 Y 中获取 X * Z 然后打印唯一的 X 而不是 Y * Z
示例:
input: n = 100
condition = {
3: 'fizz:',5: 'buzz',15: 'foo'
}
将打印:1,2,fizz,4,buzz,7,8,10,11,13,14,**foo**
这意味着对于 15,它只会打印 foo。但如果条件对象是:
condition = {
3: 'fizz:',}
然后输出将是相同的,但在 15 上它会打印 'fizzbuzz'(都是 3+5)
示例:
condition = {
2: 'boo',3: 'fizz:',}
对于 30,它将打印 boofizzbuzz (2+3+5)
你会如何解决这个问题?
解决方法
我认为这是有效的
编辑:我以为这只是输入的数字。
const n = 100
const condition = {
2: 'poo',3: 'fizz',5: 'buzz',15: 'foo'
}
function fizzBuzz(n,condition){
const fizzOrNumber = i => {
const text = Object.keys(condition).reduce((acc,item) => {
return i % parseInt(item) == 0 ? acc+condition[item] : acc;
},'');
return text || i;
};
let results = [];
for(let i=1; i<n; i+=1){
const item = Object.keys(condition).includes(`${i}`) ? condition[i] : fizzOrNumber(i);
results.push(item);
}
return results.join(',');
}
console.log(fizzBuzz(n,condition));