https://www.codewars.com/kata/55d5434f269c0c3f1b000058/train/javascript - 这是任务的链接:
function tripledouble(num1, num2) {
var a = 0;
var b = 0;
for(var i = 0; i < num1.length; i++){
if(true){
var j = i +1;
if(num1[i]=== num1[j]){
return a = 1;
}else{
return a = 0;
}}
}
for ( var x =0; x<num2.length; x++){
if(true){
var h = x +1;
if(num1[x]=== num1[h]){
return b = 1;
}else{
return b = 0;
}
}
}
return a*b;
}
我有两个问题 -
1)我的代码有什么问题 - 比如我的错误在哪里 第二个: 2)是否可以使用arr.reduce()来解决此任务?
答案 0 :(得分:1)
我认为您遇到问题的地方就是代码的最开始。你不能迭代数字。在将来,您将希望始终验证即将进入的输入。一个简单的console.log(num1,num2)可以向您说明迭代输入存在问题。
typeof operator https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
传播运营商https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
无论如何我做得很开心。我希望它可以帮助你!如果您觉得它有用,或者您认为其他人会认为它有用,请不要害怕点击upvote按钮。
function tripledouble(num1, num2) {
const first = [...JSON.stringify(num1).split('')];
const second = [...JSON.stringify(num2).split('')];
const triple = first
.filter((v, k) => v === first[k+1] && v === first[k+2]);
const double = second
.filter((v, k) => v === second[k+1]);
const result = triple
.filter(trip => double
.find(dub => dub === trip))
return result.length >= 1 ? 1 : 0;
}