腳本必須以這種方式作業:
isJumping(9) === 'JUMPING'
這是一個數字
isJumping(79) === 'NOT JUMPING'
相鄰數字不相差 1
isJumping(23454) === 'JUMPING'
相鄰數字相差 1
我有:
function isJumping(number) {
let str = number.toString();
for (let i = 1; i < str.length; i ) {
if (Math.abs(str[i 1]) - Math.abs(str[i]) == 1){
return 'JUMPING';
}
}
return 'NOT JUMPING';
}
console.log(isJumping(345));
請幫忙,哪里出錯了?
uj5u.com熱心網友回復:
回圈字符并提前回傳"NOT JUMPING"if 條件被違反 & 如果條件從未被違反 return "JUMPING"。
function isJumping(num) {
const strNum = String(Math.abs(num));
for (let i = 0; i < strNum.length - 1; i ) {
if (Math.abs(strNum[i] - strNum[i 1]) > 1) {
// replace `> 1` with `!== 1`, if diff 0 is not valid!
return "NOT JUMPING";
}
}
return "JUMPING";
}
console.log(isJumping(9));
console.log(isJumping(79));
console.log(isJumping(23454));
uj5u.com熱心網友回復:
有幾個問題:
- 你沒有處理個位數。
- 你回來得太早了。當您第一次看到數字之間的差異時,您會回傳
1,但您不知道后續差異也會是1. - 您沒有檢查第一個數字和第二個數字之間的差異,而是超出了字串的末尾。
- 您正在使用
Math.abs將數字轉換為數字的方法。
相反(見評論):
function isJumping(number) {
let str = number.toString();
for (let i = 1; i < str.length; i ) {
// Convert to number, do the difference, then
// use Math.abs to make -1 into 1 if necessary
if (Math.abs( str[i] - str[i-1]) !== 1) {
// Found a difference != 1, so we're not jumping
return "NOT JUMPING";
}
}
// Never found a difference != 1, so we're jumping
return "JUMPING";
}
console.log(isJumping(345)); // JUMPING
console.log(isJumping(9)); // JUMPING
console.log(isJumping(79)); // NOT JUMPING
console.log(isJumping(23454)); // JUMPING
在那,我使用 str[i]轉換為數字并通過運算子str[i]隱式轉換為數字,但是有很多方法可以將字串轉換為數字(我在此處列出),選擇對您的用例有意義的方法。str[i-1]-
您可能還需要考慮負數 ( isJumping(-23))。
uj5u.com熱心網友回復:
一個笨拙的方法是
if (Math.abs(Math.abs(str[i 1]) - Math.abs(str[i])) == 1)。現在您正在使用Math.abs()將數字轉換為數字。此外,索引已關閉,您從 1 開始,這很好,但是您應該比較[i]和[i-1]。和通常的不匹配:你只能在最后說“JUMPING”。所以你應該檢查!==1,并在回圈內回傳“NOT JUMPING”,然后回傳“JUMPING”。那也可以處理 1 位數的情況。
使用從數字生成數字是一種更易讀的做法parseInt(),否則注釋的實作:
function isJumping(number) {
let str = number.toString();
for (let i = 1; i < str.length; i ) {
if (Math.abs(parseInt(str[i-1]) - parseInt(str[i])) !== 1){
return 'NOT JUMPING';
}
}
return 'JUMPING';
}
console.log(isJumping(345));
console.log(isJumping(3));
console.log(isJumping(79));
uj5u.com熱心網友回復:
您只需要檢查您的單個數字大小寫,然后查看所有數字是否僅相差 1
function isJumping(number) {
let str = number.toString();
if(str.length == 1)
return 'JUMPING'
const allByOne = str.substring(1).split('').every( (x,i) => {
var prev = str[i];
return Math.abs( x - prev) == 1
})
return allByOne ? 'JUMPING' : 'NOT JUMPING';
}
console.log(isJumping(9));
console.log(isJumping(79));
console.log(isJumping(23454));
uj5u.com熱心網友回復:
一種模糊的功能方法...find獲取第一個字符對的位置,其中間隙大于一個。通過.filter忽略它們來處理否定(和其他無關的字符)。
// default b to a, so that last digit case, where b===undefined, gives true
const gapIsMoreThanOne = (a,b=a) => ( Math.abs(a-b)>1);
const isDigit = n => /[0-9]/.test(n);
const isJumping = n => n.toString()
.split("")
.filter(isDigit)
.find((x,i,arr)=>gapIsMoreThanOne(x,arr[i 1]))
=== undefined
? "JUMPING" : "NOT JUMPING"
;
console.log(isJumping(1)); // JUMPING
console.log(isJumping(12)); // JUMPING
console.log(isJumping(13)); // NOT JUMPING
console.log(isJumping(21)); // JUMPING
console.log(isJumping(21234565)); // JUPING
console.log(isJumping(-21234568)); // NOT JUMPING
console.log(isJumping("313ADVD")); // NOT JUMPING
PS:對我來說,“JUMPING”意味著有一個大于一的差距,而不是沒有:但我已經解決了這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464465.html
標籤:javascript
