如何在Javascript中通过索引在数组中找到子字符串

How to find the substrings in Javascript by indeces in array

本文关键字:字符串 数组 Javascript 索引      更新时间:2023-09-26

我是Javascript新手。我有字符串和数组的一些索引。

var string = "?str!ing."; //input string
var arr = [0, 4, 8]; // indices of the punctuation signs in the string

如何查找子字符串:

["?", "str", "!", "ing", "."]

如果您已经在arr中有索引,这将用子字符串填充变量res:

var res = [];
if(arr[0] > 0) res.push(string.substring(0, arr[0])); //only needed if the first index is not the start of the string and the first substring has to be added
for(var i = 0; i< arr.length; i++){
    var index = arr[i]; 
    res.push(string.substring(index,++index)); //add the puncutation sign 
    var next = arr[i+1] || string.length; //get the next index (or end of string)
    if(index<next) res.push(string.substring(index, next)); //add the substring if length > 0
}

小提琴

也许另一种方法是在确定索引的同时构建res数组,但是如果你已经有了索引数组,上面的方法应该可以工作。

我相信这段代码会根据索引来打断句子。

var length = arr.length;
var responce = [];
for (var x = 0; x<length ; x++){
    if(arr[x] == 0){
        var z = string.slice(arr[x],arr[x]+1);
        responce.push(z)
    }else{
        var z = string.slice(arr[x-1]+1,arr[x]);
        responce.push(z)
        var z = string.slice(arr[x],arr[x]+1);
        responce.push(z)
    }
    if((x == length-1) && (arr[x] < string.length-1)){
        var z = string.slice(arr[x]+1,string.length);
        responce.push(z)
    }
}
console.log(responce);

快速的解决方案是有一个预定义的分隔符列表:

splitString = function(string, splitters) {
    var list = [string];
    for(var i=0, len=splitters.length; i<len; i++) {
        traverseList(list, splitters[i], 0);
    }
    return flatten(list);
}
traverseList = function(list, splitter, index) {
    if(list[index]) {
        if((list.constructor !== String) && (list[index].constructor === String))
            (list[index] != list[index].split(splitter)) ? list[index] = list[index].split(splitter) : null;
        (list[index].constructor === Array) ? traverseList(list[index], splitter, 0) : null;
        (list.constructor === Array) ? traverseList(list, splitter, index+1) : null;    
    }
}
flatten = function(arr) {
    return arr.reduce(function(acc, val) {
        return acc.concat(val.constructor === Array ? flatten(val) : val);
    },[]);
}
var stringToSplit = "?str!ing.";
var splitList = ["?", "!", "."];
splitString(stringToSplit, splitList);

上面例子的回报:(str, ing)