在javascript中不使用split方法编写字符串拆分函数

时间:2014-07-15 18:38:29

标签: javascript

我正在尝试创建一个简单的函数,它接受一个字符串和一个分隔符,然后根据分隔符值将字符串拆分成一个数组。我正在尝试编写此函数而不使用javascript中的split方法。所以说我有一个sampleInput = '123 $ 456 $ 789'和一个delimiter ='$'然后函数stringDelimiter(sampleInput,delimiter)将返回['123','456','789']。

    var stringDelimiter = function (sampleInput, delimiter) {

        var stringArray = [];
        var garbageArray = [];
        var j = 0;


        for (var i = 0; i < sampleInput.length; i++) {

            if (sampleInput.charAt(i) == delimiter) {
                garbageArray = sampleInput.charAt(i);
                j++;
            } else {
            if (!stringArray[j]) stringArray[j] = '';
            stringArray[j] += sampleInput.charAt(i);
            }
        }
        return stringArray;
    }

我遇到的问题是如果分隔符出现在字符串的开头,则返回数组的第一个元素undefined。我被困在如何处理这个案子。因此,如果我有sampleInput ='$ 123 $ 456 $ 789'和delimiter ='$',则返回['123','456','789']而不是['undefined','123','456','789' ]。 任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:2)

这有点简单,它可能会做你想要的:

var stringDelimiter = function (sampleInput, delimiter) {
    var stringArray = [''];
    var j = 0;

    for (var i = 0; i < sampleInput.length; i++) {
        if (sampleInput.charAt(i) == delimiter) {
            j++;
            stringArray.push('');
        } else {
            stringArray[j] += sampleInput.charAt(i);
        }
    }
    return stringArray;
}

您的garbageArray似乎没必要。

答案 1 :(得分:0)

如果当前字符是分隔符,并且当前迭代为0,则继续

答案 2 :(得分:0)

如果应从结果数组中删除空(即未定义,空或空字符串)元素,则此函数接受字符串,分隔符和标志。 (未经测试,现在它是一个快速代码。)

更新

现在它经过测试(一点点)并得到纠正,我创建了一个jsFiddle here。此外,它支持空分隔符,空输入字符串和长度> 1的分隔符。 1。

function CustomSplit(str, delimiter, removeEmptyItems) {
  if (!delimiter || delimiter.length === 0) return [str];
  if (!str || str.length === 0) return [];
  var result = [];
  var j = 0;
  var lastStart = 0;
  for (var i=0;i<=str.length;) {
    if (i == str.length || str.substr(i,delimiter.length) == delimiter)
    {
      if (!removeEmptyItems || lastStart != i)
      {
          result[j++] = str.substr(lastStart, i-lastStart);
      }
      lastStart = i+delimiter.length;
      i += delimiter.length;    
    } else i++;
  }
  return result;
}

答案 3 :(得分:0)

使用正则表达式怎么样?

function x_split(s)
{
     return s.match(/([^$]+)/g);
}

E.g。 http://jsfiddle.net/2F9MX/2/

答案 4 :(得分:0)

如果有人需要一个TypeScript(以及我为之编写的MicroBit),这是@Scott Sauyet的TypeScript答案的变更版本:

代码:

function splitString(sampleInput: string, delimiter: string): string[] {
    let stringArray = ['']
    let j = 0

    for (let i = 0; i < sampleInput.length; i++) {
        if (sampleInput.charAt(i) == delimiter) {
            j++;
            stringArray.push('')
        } else {
            stringArray[j] += sampleInput.charAt(i)
        }
    }
    return stringArray
}

用法示例

let myString = "Lorem ipsum dolor sit amet"
let myArray = splitString(myString, " ")
myArray[0]  // "Lorem"
myArray[1]  // "ipsum"

答案 5 :(得分:-1)

function split(str){
	var stringArray = [];
  
  for(let i=0;i<str.length;i++){
  	stringArray.push(str[i]);
  }
  return stringArray;
}

console.log(split("suraj"));