[javascript] 주어진 인덱스에서 문자열을 두 개로 분할하고 두 부분을 모두 반환

주어진 인덱스에서 분할 한 다음 두 부분을 쉼표로 구분하여 반환해야하는 문자열이 있습니다. 예를 들면 :

string: 8211 = 8,211
        98700 = 98,700

따라서 주어진 인덱스에서 문자열을 분할 한 다음 문자열의 절반을 모두 반환 할 수 있어야합니다. 내장 메서드는 분할을 수행하는 것처럼 보이지만 분할의 한 부분 만 반환합니다.

string.slice는 문자열의 추출 된 부분 만 반환합니다. string.split은 인덱스가 아닌 문자로만 분할 할 수 있습니다.



답변

이 시도

function split_at_index(value, index)
{
 return value.substring(0, index) + "," + value.substring(index);
}

console.log(split_at_index('3123124', 2));


답변

ES6 1- 라이너

// :: splitAt = number => Array<any>|string => Array<Array<any>|string>
const splitAt = index => x => [x.slice(0, index), x.slice(index)]

console.log(
  splitAt(1)('foo'), // ["f", "oo"]
  splitAt(2)([1, 2, 3, 4]) // [[1, 2], [3, 4]]
)
  


답변

쉽게 확장하여 여러 인덱스로 분할하고 배열 또는 문자열을 사용할 수 있습니다.

const splitOn = (slicable, ...indices) =>
  [0, ...indices].map((n, i, m) => slicable.slice(n, m[i + 1]));

splitOn('foo', 1);
// ["f", "oo"]

splitOn([1, 2, 3, 4], 2);
// [[1, 2], [3, 4]]

splitOn('fooBAr', 1, 4);
//  ["f", "ooB", "Ar"]

lodash 문제 추적기 : https://github.com/lodash/lodash/issues/3014


답변

다음에서 사용할 수있는 숫자 포맷터 JS를 사용할 수도 있습니다.

https://code.google.com/p/javascript-number-formatter/

형식 옵션

http://jsfiddle.net/chauhangs/hUE3h/

  format("##,###.", 98700)
  format("#,###.", 8211)


답변

이 같은?…

 function stringConverter(varString, varCommaPosition)
 {
   var stringArray = varString.split("");
   var outputString = '';
   for(var i=0;i<stringArray.length;i++)
   {
     if(i == varCommaPosition)
      {
        outputString = outputString + ',';
      }

     outputString = outputString + stringArray[i];
   }

   return outputString;
 }


답변

이렇게 할 수도 있습니다.
https://jsfiddle.net/Devashish2910/8hbosLj3/1/#&togetherjs=iugeGcColp

var str, result;
str = prompt("Enter Any Number");

var valueSplit = function (value, length) {
    if (length < 7) {
        var index = length - 3;
        return str.slice(0, index) + ',' + str.slice(index);
    }
    else if (length < 10 && length > 6) {
        var index1, index2;
        index1 = length - 6;
        index2 = length - 3;
        return str.slice(0,index1) + "," + str.slice(index1,index2) + "," + str.slice(index2);
    }
}

result = valueSplit(str, str.length);
alert(result);


답변

코드 우아함이 정규식의 성능 적중률보다 높으면

'1234567'.match(/^(.*)(.{3})/).slice(1).join(',')
=> "1234,567"

더 정확하게 정규식을 수정할 여지가 많이 있습니다.

경우 join()다음 작동하지 않습니다 당신이 사용해야 할 수도 map적은 바이트와 라인 노이즈가 여기 다른 답변을 지적하는 폐쇄와 함께.