Algo用于javascript中的书签更改

时间:2014-01-07 12:50:15

标签: javascript algorithm

我有一个像['1','1.1','1.1.1','1.2','1.2.1',.......]这样的javascript数组 它正在形成书签序列,如:

1   
    1.1
        1.1.1
    1.2
        1.2.1
            1.2.1.1
        1.2.2
2
    2.1
        2.1.1
    2.2
    2.3
3   
    3.1
    3.2
    3.3
4
    4.1

现在我需要修改数组从7开始,如['7','7.1','7.1.1',7.2 ......]它必须相应地向下改变。之前它从1开始,修改后从7开始。

7
    7.1
        7.1.1
    7.2
        7.2.1
            7.2.1.1
        7.2.2
8
    8.1
        8.1.1
    8.2
    8.3
9
    9.1
    9.2
    9.3
10
    10.1

基本上是线序改变。 1变为7,影响1.1到7.1。同样下线。 我是新手程序员在javascript中寻找一些解决方案来修改数组列表。

2 个答案:

答案 0 :(得分:3)

简洁优雅的解决方案:

var bookmark = ['1','1.1','1.1.1','1.2','1.2.1','1.2.1.1','1.2.2','2','2.1','2.1.1','2.2','2.3','3','3.1','3.2','3.3','4','4.1'];

function updateBookmark(bookmark) {
  var split = bookmark.split('.');
  split[0] = 6 + +split[0];
  return split.join('.');
}

var updatedBookmark = bookmark.map(updateBookmark);

不是问题的一部分,但如果你想要将每个2.x.y更改为2.x.(3 + y),你可以做很少的改动:

function updateBookmark(bookmark) {
  var split = bookmark.split('.');
  if (split[0] !== '2' || split.length < 3) return bookmark;
  split[2] = 3 + +split[2];
  return split.join('.');
}

答案 1 :(得分:1)

怎么样;

var x = ['1','1.1','1.1.1','1.2','1.2.1','2','2.1'];
var y = [];

for (var i = 0; i < x.length; i++) {
    var value = x[i];
    var int = parseInt(value, 10) + 6;
    y.push(int + value.substr((value + ".").indexOf(".")));    
}

console.log(y)

>> ["7", "7.1", "7.1.1", "7.2", "7.2.1", "8", "8.1"]