簡體   English   中英

我需要找到字符串 js 中兩個字符之間的距離。 我有一個解決方案,但我無法理解與 if 語句相關的代碼片段

[英]i need to find the distance between two characters in string js. i have a solution but i can't understand the snippet of code related to if statement

任務是編寫一個 function subLength(),它接受 2 個參數,一個字符串和一個字符。 function 應該在字符串中搜索該字符的兩次出現,並返回它們之間的長度,包括這 2 個字符。 如果該字符出現少於 2 次或超過 2 次,則 function 應返回 0。

const subLength = (str, char) => {
let charCount = 0;
let len = -1;

for (let i=0; i<str.length; i++) {
  if (str[i] == char) {
    charCount++;
    if (charCount > 2) {
      return 0;
    }
// could somebody explain why -1 is equal to len and then len is reassigned to i???       
if (len == -1) {
      len = i;
    } else {
      len = i - len + 1
    }
  }
}
if (charCount < 2) {
  return 0;
}

return len;
};

伙計,還有其他方法可以做到這一點。 看看我的代碼是否可以幫助您更好地理解:)

const subLength = (str, char) => {
  let charCount = 0;
  let letterFound = [];
  let arr = str.split('');
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === char) {
      letterFound.push(i);
      charCount++;
    }
  }
  let result = arr.slice(letterFound[0], letterFound[1]).length + 1;
  if (charCount > 2 || charCount < 2) return 0;
  return result;
}
console.log(subLength('saturday', 'a'));

在第一次出現 len= -1 所以: (len ==-1) 變為 true; 並且 len 更改為 i 所以 len=i; 在第二次出現 len 不是 -1 所以:

len = i - len -1;

本質上,在上面的表達式中, len 保持第一次出現的索引,而 i 有第二次出現的索引,所以區別將是,兩次出現之間的差異,'qweraq':第一次出現:0,第二次:6 . 6-0-1= 5 是差值;

這就是我設法重寫您的代碼的方式。 希望這可以幫助。

 const subLength = (str, char) => { const arr = str.split(''); let count = 0; arr.forEach(letter => letter === char ? count++ : '') const result = arr.some(letter => { if (arr.indexOf(char) !== arr.lastIndexOf(char) && count == 2) { return true } return false }) return result ? Math.abs(arr.indexOf(char) - arr.lastIndexOf(char)) + 1 : 0 }

雖然可以在單個循環中計算索引和計數,但考慮到瑣碎性,我傾向於使用標准 API 方法進行掃描。 如果應用程序確實需要它,那么以后總是可以優化。

首先,我們將字符串轉換為數組,以便我們能夠過濾與輸入字符匹配的內容,並得出長度。

僅當出現 2 次時,我們才計算在字符串上使用indexOflastIndexOf方法之間的距離(請注意,如果兩次出現是連續的,則只需要對字符串進行第二次完整掃描)。

否則,結果應為 0。

 const subLength = (str, chr) => { const count = str.split('').filter(ltr => ltr === chr).length if (count === 2) { return (str.lastIndexOf(chr) - str.indexOf(chr)) + 1 } return 0 } console.log(subLength('asddfghvcba', 'a')) console.log(subLength('asddfghvcba', 'x')) console.log(subLength('aaaaaaaaaaa', 'a'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM