我創建了一個傳入字串和字符的函式。字串是saturday,字符是a。
我希望結果是一個陣列,其中包含字母“a”所在位置的所有索引號saturday。
然后陣列僅以[1]. 所以它找到第一個a坐在第二個索引處。我通過更改saturday為進行了測驗soturday,控制臺使用[6].
我希望結果是 [1, 6]
我嘗試將回傳結果放在下一組 {} 大括號之外,但沒有任何樂趣。
const subLength = (str, cha) => {
let result = [];
for (let i = 0; i < str.length; i ) {
if (str.charAt(i) === cha) {
result.push(str.indexOf(cha));
return result;
}
}
};
console.log(subLength('Saturday', 'a'));
uj5u.com熱心網友回復:
您的代碼有 2 個小問題
return 陳述句在 for 回圈中。回圈第一次命中時,您的回圈將停止并且函式將回傳。這就是為什么你只得到 1 個結果。移動
return外回圈。一旦上述問題得到解決,您將意識到您的陣列現在將回傳
[1, 1]。這是因為str.indexOf(cha)將始終回傳,1因為它回傳 first 的索引a。要解決此問題,您應該將索引附加i到陣列中,因為它表示當前字符的索引。
const subLength = (str, cha) => {
let result = [];
for (let i = 0; i < str.length; i ) {
if (str.charAt(i) === cha) {
result.push(i);
}
}
return result;
};
console.log(subLength('Saturday', 'a'));
uj5u.com熱心網友回復:
你很接近。
在您的代碼中,一旦找到匹配項,就會執行回傳。你想在檢查完每個字符后回傳 - 所以我在 foreach 之后移動了它。
indexof有第二個引數,它定義了開始查找的字符。如果你省略它,你每次都會得到第一個匹配的索引——這不是你想要的。
const subLength = (str, cha) => {
let result = [];
for(let i = 0; i < str.length; i ){
if(str[i] === cha) {
result.push(str.indexOf(cha, i));
}
}
return result;
};
console.log(subLength('Saturday', 'a'));
改進空間
由于無論如何您都在迭代每個 char ,因此您可以簡單地存盤每個iwherestr[i]匹配項cha。
如此優化:
const subLength = (str, cha) => {
let result = [];
for(let i = 0; i < str.length; i ){
if(str[i] === cha) {
result.push(i);
}
}
return result;
};
console.log(subLength('Saturday', 'a'));
使用正則運算式的更簡單的版本:
const subLength = (str, cha) => {
return [...str.matchAll(new RegExp(cha, 'g'))].map(e => e.index);
};
console.log(subLength('Saturday', 'a'));
uj5u.com熱心網友回復:
將return result;for 回圈的外部放置如何?
uj5u.com熱心網友回復:
如果區分大小寫,這樣的東西應該可以作業
const subLength = (str, cha) => {
const chaArr = str.split('');
const result = [];
chaArr.forEach((v, i) => {
if (v === cha) result.push(i);
})
return result
};
console.log(subLength('Saturday', 'a'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/405305.html
標籤:
