【问题标题】:Generating series numbers with adding String at middle在中间添加字符串生成序列号
【发布时间】:2014-08-02 10:50:31
【问题描述】:

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

字符串 = 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 函数是一个自写函数,它将字符串转换(拆分)为数组。

有人会帮助我吗?

【问题讨论】:

  • 你能解释一下你给出的这个例子吗? "String = 1,2,3,4,5 D Positions: 2,4 最终结果应该是:1,D,2,D,3" 怎么样?
  • 是的,您将拥有具有 n 个数字的系列字符串,例如 1、2、3、4、5。我想用一些位置替换字符串“D”(假设位置可能是 3,4)。一旦被替换,最终的字符串应该是这样的 1,2,D,D,3。字符串应该被替换,直到第 n 个值的剩余数字应该像提到的那样进行系列对齐。

标签: javascript jquery arrays algorithm for-loop


【解决方案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,D,2,D,3,4 [不是 1,D,3,D,5,6]。
  • 啊,对不起,我看到你也必须改变价值观;修复将很快提供:)
  • 检查一下,我希望就是这样,它是可以理解的。
  • 嗨 Berserker,代码中存在逻辑错误,在申请职位时,请检查此 jsfiddle jsfiddle.net/9M32w/3
【解决方案2】:
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);

【讨论】:

    【解决方案3】:

    使用 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);
    

    【讨论】:

    • 它的工作。一变。 deletedString 应该在拼接之前排序
    • 是的。您可以在此处排序或从服务器提供排序后的数据。
    • @VijayakumarS 我将答案中的代码更改为排序,但没有对其进行测试。
    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2021-12-31
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多