我正在解決以下問題:
給定一個數字陣列的輸入,回傳每個數字按其在陣列中的位置遞增的陣列:第一個數字將遞增 1,第二個數字將遞增 2,依此類推。確保從 1 開始計算您的位置(而不是 0)。
您的結果只能包含一位數字,因此如果添加一個數字及其位置會給您一個多位數字,則只應回傳該數字的最后一位數字。
注意:如果您的陣列是空陣列,則回傳一個空陣列 陣列將只包含數字,因此不必擔心檢查示例
[1, 2, 3] --> [2, 4, 6] # [1 1, 2 2, 3 3]
[4, 6, 9, 1, 3] --> [5, 8, 2, 5, 8] # [4 1, 6 2, 9 3, 1 4, 3 5]
# 9 3 = 12 --> 2
我的代碼:
const incrementer = (arr) => {
if (arr === []) {
return []
}
let newArr = []
for (let i = 0; i <= arr.length; i ) {
let result = arr[i] (i 1)
newArr.push(result)
if (newArr[i] > 9 ) {
let singleDigit = Number(newArr[i].toString().split('')[1])
newArr.push(singleDigit)
}
}
const filteredArr = newArr.filter(el => el >= 0 && el <= 9)
return filteredArr
}
我似乎無法通過最新的測驗用例,如下所示:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 8]), [2, 4, 6, 8, 0, 2, 4, 6, 8, 9, 0, 1, 2, 2]
我一直在找回整個正確的陣列,直到第二個 0,之后解決方案中缺少其他數字 1,2,2。我究竟做錯了什么?
uj5u.com熱心網友回復:
您的代碼中的問題是filteronly 在最后運行,因此當您在一次迭代中進行雙推時(一次使用超過一位的值,一次只使用最后一位),下一次迭代下一個被推送的值將不再有正確的索引:newArr[i]不會是那個值。
在將其推送到新陣列之前,最好將該值更正為一位數。
此外,您可以更好地利用 JavaScript 的強大功能:
- 它有一個很好
map的陣列方法,非常適合這個目的 - 使用模運算獲得最后一位數字,而無需先創建字串
這是建議的功能:
const incrementer = (arr) => arr.map((val, i) => (val i 1) % 10);
console.log(incrementer([1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 8]));
uj5u.com熱心網友回復:
請看下面的代碼。
const incrementer = arr => {
if (arr === []) {
return [];
}
let newArr = [];
for (let i = 0; i < arr.length; i ) {
let result = arr[i] (i 1);
// newArr.push(result);
if (result > 9) {
let singleDigit = Number(result.toString().split("")[1]);
newArr.push(singleDigit);
} else {
newArr.push(result);
}
}
// const filteredArr = newArr.filter(el => el >= 0 && el <= 9);
return newArr;
};
console.log(incrementer([1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 8]))
uj5u.com熱心網友回復:
...所以如果添加一個數字和它的位置會給你一個多位數的數字,那么只應該回傳數字的最后一位數字。因此,如果數字是 12,則它只希望將 2 添加到陣列中。
所以你的代碼應該是:
if (newArr[i] > 9)
{
newArr[i] = newArr[i] % 10; // remainder of newArr[i] / 10
}
const incrementer = (arr) => {
if (arr.length === 0) { // CHANGE HERE
return [];
}
let newArr = []
for (let i = 0; i <= arr.length; i ) {
let result = arr[i] (i 1)
newArr.push(result)
if (newArr[i] > 9 ) {
newArr[i] = newArr[i] % 10; // CHANGE HERE
}
}
const filteredArr = newArr.filter(el => el >= 0 && el <= 9)
return filteredArr
}
console.log(incrementer([2, 4, 6, 8, 0, 2, 4, 6, 8, 9, 0, 1, 2, 2]));
console.log(incrementer([1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 8]));
uj5u.com熱心網友回復:
const incrementer = (arr) => {
if (arr === []) {
return []
}
return arr.map((number, index) => (number index 1) % 10);
}
在 (number index 1) 和 % 10 操作中進行所需的添加將獲得最后一位數字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395549.html
標籤:javascript 数组
