>

https://jsfiddle.net/The95Chaps/2L4t9saq/180/ 는 내 바이올린

대부분의 코드는 쓸모없고, 중요한 것은 글로 올립니다

var baseConverter = function(r, e, n) {
  var o = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if (e <= 0 || e > o.length || n <= 0 || n > o.length) return console.log("Base unallowed"), null;
  var l, t = 0;
  if (10 != e) {
    var a = r.length;
    for (l = 0; l < a; l++) {
      var u, f = -1;
      for (u = 0; u < o.length; u++)
        if (r[l] == o[u]) {
          f = 1;
          break
        }
      if (u >= e) return console.log("Symbol unallowed in baseform"), null;
      if (-1 == f) return console.log("Symbol not found"), null;
      var s = a - l - 1;
      t += 0 == s ? u : u * Math.pow(e, s)
    }
  } else t = parseInt(r);
  if (10 != n) {
    for (var g = []; t > 0;) {
      var i = t % n;
      if (i < 0 || i >= o.length) return console.log("Out of bounds error"), null;
      g.push(o[i]), t = parseInt(t / n)
    }
    return g.reverse().toString().replace(/,/g, "")
  }
  return t.toString()
}
var b36torgba = function(input) {
  for (var i = 1; i < (input.length / 8) + 1; i++) {
    var arr = input
    var r = arr.charAt[0 + (i - 1) * 8] + "" + arr.charAt[1 + (i - 1) * 8]
    var g = arr.charAt[2 + (i - 1) * 8] + "" + arr.charAt[3 + (i - 1) * 8]
    console.log(g.charAt[2])
    var b = arr.charAt[4 + (i - 1) * 8] + "" + arr.charAt[5 + (i - 1) * 8]
    console.log(b)
    var a = arr.charAt[6 + (i - 1) * 8] + "" + arr.charAt[7 + (i - 1) * 8]
    console.log(a)
    var rrgba = baseConverter(r, 36, 10)
    var grgba = baseConverter(r, 36, 10)
    var brgba = baseConverter(r, 36, 10)
    var argba = baseConverter(r, 36, 10)
    var bigMessOfAVariable = "rgba(" + rrgba + "," + grgba + "," + brgba + "," + argba + "),"
    return bigMessOfAVariable;
  }
}

당신은 top 함수를 무시할 수있다. 모든 것이 기본 변환기 스크립트 일 뿐이다. 세 개의 입력, 입력, 기본, 그리고 기본으로 변환되어야하는 기본을 가지고있다 : 예 : baseConverter (73,36,10 )는 255를 출력합니다.

지금 문제는 내 b36torgba 입니다  기능. 길이가 0, 8 또는 8의 배수를 보장하는 문자열을 가져옵니다. 이는 700 indexOf[] 를 사용하지 않고 모든 것이 원활하게 실행되도록 표준화입니다.  기능.

입력을 받아서 8로 나눕니다.이 함수는 몇 개의 바이트를 통과해야하는지, 얼마나 많은 뱉어 질지를 알려주므로 문자열 "[7300002S7300002S]"  8로 나눈 출력 2이므로 스크립트는 2 번의 반복을 실행합니다.

현재는 문자열을 가져 와서 2 문자 (각 표준)의 각 그룹을 특정 변수에 할당해야합니다. 이렇게하면 모든 문자열을 끝에 넣고 같은 문자열로 출력하지만 기본 10에서 출력 할 수 있습니다 rgba (따라서 73이 사용 중이므로 기본 36의 73은 255입니다).하지만 그 중 하나를 수행하기 전에 문자열에서 문자를 찾으려고하면 구문 오류가 발생하여 중단됩니다.

알려지지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다

b36torgba에서 ((index) : 40)

window.onload에서 ((index) : 55)

문자열을 내 charAt ()에 공급하려고하면 왜 끊어 집니까?

ps : 현재 상태의 코드가 작동하면 마지막 8 자의 rgba 값만 출력한다는 것을 이해합니다

  • 답변 # 1

    쉬운 실수. 당신은 charAt 를 사용하고 있습니다   charAt[index] 를 수행하여 (함수)   charAt(index) 대신 (대괄호 사용)  (둥근 괄호 사용). 문제를 해결하면 문제가 해결됩니다.

    또한- b36torgba(["7300002S7300002S"]) 를 수행하여 함수를 호출하고 있습니다.  JSFiddle에서 문자열 조작을 시도하십시오. ["7300002S7300002S"] 부터  문자열이 아닌 배열입니다. .charAt()  작동하지 않습니다. b36torgba("7300002S7300002S") 를 수행하여 함수를 호출하십시오.  대신

관련 자료

  • 이전 로컬 컴퓨터 설정에 Docker가없는 Hyperledger Fabric
  • 다음 typescript - 더 읽기 쉬운 Angular/RxJS 만들기