JavaScript 中书签变化算法

3

我有一个 JavaScript 数组,类似于 ['1','1.1','1.1.1','1.2','1.2.1',.......]。它形成了书签序列:

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解决方案来修改数组列表。


1
循环和6 + parseInt('N.X.Y. ..', 10),因为parseInt对于任何整数N始终是N - Alex K.
Alex,你能否详细说明一下,如果我执行parseInt('N.X.Y','7.1.2'),它会返回NaN。 - Sumeet Kumar Yadav
2个回答

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
如何;
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"] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接