最快的方法来实现这个序列?

时间:2015-07-30 13:02:58

标签: javascript arrays sorting

我正在尝试创建一个构建具有动态长度的数组的简单算法。

然后,它将逐个替换一个项目,然后是两个,然后是三个,依此类推,直到剩下的唯一项目为第一个和最后一个。

像这样:

12345

1*345 // it never touches the first
12*45
123*5 // it doesn't ever touch the last item

1**45
12**5

1***5 // done, nowhere else to go

我整理了一个简单的演示来展示我正在尝试做的事情。

var length = 6,
    array = [],
    log = document.getElementById("log"),
    edited,
    j,
    i;

for (i = 1; i <= length; i++) {
    array.push(i);
}

log.innerHTML += array.join(" ") + "<br><br>";

for (i = 1; i < (length - 1); i++) {
    edited = array.concat();
    for (j = i; j < (length - 1); j++) {
        edited[j] = "*";
        log.innerHTML += edited.join(" ") + "<br>";
    }
    log.innerHTML += "<br>";
}

Fiddle

它工作正常,唯一的问题是它出了故障。 现在它似乎只按星号的数量,然后按索引进行迭代。我需要它做相反的事情。

// it does this
12345

1*345
1**45
1***5

12*45
12**5

123*5 // out of order

如果有人可以提供帮助那会很棒,因为我真的很茫然!

2 个答案:

答案 0 :(得分:1)

这应该可以完成。

var gulp = require('gulp');
var gutil = require('gulp-util');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var watchify = require('watchify');
var reactify = require('reactify');

gulp.task('default', function() {
  var bundler = watchify(browserify({
    entries: ['./src/app.jsx'],
    transform: [reactify],
    extensions: ['.jsx'],
    debug: true
  }));

  function build(file) {
    if (file) gutil.log('Recompiling ' + file);
    return bundler
      .bundle()
      .on('error', gutil.log.bind(gutil, 'Browserify Error'))
      .pipe(source('main.js'))
      .pipe(gulp.dest('./'));
  };
  build();
  bundler.on('update', build);
});

JSFiddle

答案 1 :(得分:0)

这似乎运作良好:

&#13;
&#13;
str = "1234567"

len = str.length;

for(var stars = 1; stars < len - 1; stars++) {
  for(var pos = 1; pos < len - stars; pos++) {
    var s = str.substr(0, pos) 
      + new Array(stars + 1).join("*") 
      + str.substr(pos + stars);
    document.write(s + "<br>");
  }
}
&#13;
&#13;
&#13;