通过在中间添加String来生成序列号

时间:2014-08-02 10:50:31

标签: javascript jquery arrays algorithm for-loop

我正在向我的一个客户端编写JavaScript插件,在此我需要生成一系列字符串,如“1,2,D,3,4”/“1,D,2,3,4,5,6” 。长度可以是n个数字。 “D”位置存储在一个单独的字符串中,如2,4。在这里,我们希望生成如下所示的长度

String = 1,2,3,4,5 D位置:2,4 最终结果应为:1,D,2,D,3

我试过的东西,

 var deletedString = "2,4"
    var Values = "1,2,3,4,5,6";
    var lengthFromValues = SplitString_ToArray(Values).length;
    var deletedArray = splitString_ToArray(deletedString);
    var temp_arr = [];
    for(var i = 1; i <= lengthFromValues; i++) {        
        if(deletedArray[i-1] > 0) {
          temp_arr.push("D");
        } else temp_arr.push(i);
    }
alert(temp_arr.toString());

注意:SplitString_ToArray函数是一个自编写的函数,它将(拆分)字符串转换为数组。

有人会帮助我吗?

3 个答案:

答案 0 :(得分:1)

检查一下,我已经改变了一点逻辑。实际上,您可以使用deletedString值替换转换为数组的Values中的值,然后将数组放回字符串。 jsFiddle

var deletedString = "2,4"
var Values = "1,2,3,4,5,6";
var deletedArray = SplitString_ToArray(deletedString);
var valuesArray = SplitString_ToArray(Values);
var finalLength = valuesArray.length;

for (i=0; i< deletedArray.length; i++){
    console.log(deletedArray[i]);
    var idxToReplace = parseInt(deletedArray[i]-1); // substract 1, because your indexes are 1-based
    valuesArray.splice(idxToReplace,0,'D');
}

// back to string
valuesArray = valuesArray.slice(0, finalLength);
var result = valuesArray.join();
alert(result);

function SplitString_ToArray(inString){
    var result = inString.split(',');
    console.log(result);
    return result;
}

答案 1 :(得分:0)

使用forEach循环,应该这样做:

var deletedString = "2,4";
var Values = "1,2,3,4,5,6";

var toDelete = deletedString.split(','),
    allValues = Values.split(','),
    length = allValues.length;

toDelete.sort(function(a, b) {return a - b;});

toDelete.forEach(function(position) {
    allValues.splice(parseInt(position) - 1, 0, 'D');
});

var newValues = allValues.splice(0, length).join();
alert(newValues);

答案 2 :(得分:0)

var deletedString = "2,4"; /* Sort the values */
var Values = "1,2,3,4,5,6";

var allValues = Values.split(','),
    length = allValues.length;

deletedString.split(',').forEach(function(position) {
    allValues.splice(parseInt(position) - 1, 0, 'D');
});

var newValues = allValues.splice(0, length).join();
alert(newValues);