const computeDash=(num)=>{
const arr=num.split('');
const nums=arr.map(Number);
for(let i=0;i<(nums.length-1);i ){
if(nums[i]%2===0 && nums[i 1]%2===0){
nums.splice(i,0,'-');
}
}
return nums.join('');
}
console.log(computeDash('025468'));
上面的代碼給出了致命錯誤。
但是當我更改 for 回圈時,下面的代碼作業正常。我不明白為什么第一個代碼給出錯誤。有誰知道為什么?
const computeDash=(num)=>{
const arr=num.split('');
const nums=arr.map(Number);
for(let i=0;i<nums.length;i ){
if(nums[i-1]%2===0 && nums[i]%2===0){
nums.splice(i,0,'-');
}
}
return nums.join('');
}
console.log(computeDash('025468')); //0-254-6-8
uj5u.com熱心網友回復:
第一種方法不起作用,因為您在索引 i 處添加了“-”。對于給定的測驗用例“025468”,您的回圈總是在開始時添加“-”。即在第一次迭代之后,陣列將是 ['-',0,2,5,4,6,8] 并且在第二次迭代之后它變成 ['-','-',0,2,5,4 ,6,8] 并進入無限回圈。
使第一種方法起作用的修復是
const computeDash=(num)=>{
const arr=num.split('');
const nums=arr.map(Number);
for(let i=0;i<(nums.length-1);i ){
if(nums[i]%2===0 && nums[i 1]%2===0){
nums.splice(i 1,0,'-');
}
}
return nums.join('');
}
console.log(computeDash('025468'));
uj5u.com熱心網友回復:
一般來說,我不建議在回圈遍歷陣列時更改陣列。您的 for 回圈在計數方面將不可靠,nums因為在您回圈時陣列的長度正在變化。在這種情況下,發生致命錯誤是因為您進入無限回圈,因為nums.length每次您將新-的插入陣列時都會不斷增加。
至于具體問題,為什么一個作業而不是另一個作業 - 主要是關于運氣。其他輸入的行為會有所不同。但是撰寫的程式在這兩種情況下都應該被認為是可疑的!
這是一個在不更改您正在回圈的陣列的情況下回圈的示例……相反,我們將數字推送到一個包含所需結果的新陣列中。
const computeDash = (num) => {
const arr = num.split('');
const nums = arr.map(Number);
const result = [];
for (let i = 0; i < (nums.length-1); i ) {
result.push(nums[i]);
if (nums[i] % 2 === 0 && nums[i 1] % 2 === 0) {
result.push('-');
}
}
result.push(nums[nums.length-1]);
return result.join('');
}
console.log(computeDash('025468'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516496.html
上一篇:使用正則運算式檢查字串格式
下一篇:如何洗掉此解決方案中的重復代碼?
