<script type="text/javascript">
Array.prototype.strip=function(){
            if(this.length<2) [this[0]]||[];
                  var arr=[];
           for(var i=0;i<this.length;i++){
                  arr.push(this.splice(i--,1));
                  for(var j=0;j<this.length;j++){
                          if(this[j]==arr[arr.length-1]){
                                  this.splice(j--,1); }}}
return arr;
}var string="apple"
var s_length=string.length;
var s_a=new Array(s_length);
s_a=string.split("",s_length)//字符串分割成数组
function randomsort() {
        return Math.random()>.5 ? -1 : 1;//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
}
/*字符串长度数的阶乘*/
var num=(function(){
 var num_s_l=1;
for(var i=1;i<=s_length;i++){
 num_s_l *= i;}
 return num_s_l;})

var all_arr=new Array;for(var i=0;i<num();i++){  //想在()里加判断让最终的数组元素个数等于单词内字母的阶乘  不知道该怎么改!!
s_a.sort(randomsort);
var new_s=s_a.join("");
all_arr[i]=new_s;
}
document.write(all_arr.strip());
</script>现在能输入不重复的单词了,但是不完全 比如三个字母组成的单词若各字母都不同的话应该有6种排列而我的程序因为没有检测所以显示出的数目都是随机的。
那位大侠帮帮看该怎么修改!

解决方案 »

  1.   

    这个不是问题  比如 输入 aaa 结果只会输出一个 aaa  测试过这个没问题
      

  2.   

    var string="adf";//三个不同的
    你试试
    document.write(all_arr.strip());
    改成
    document.write(all_arr);//这里面有结果等于你的阶乘的个数组合,但是已经有重复了,所以过滤掉了!
      

  3.   

    建议不要用随机分配。还是用原始一个个吧!如果有abc那么就是 abc,acb,bac,bca,cab,cba
    第一个开始跟其它两个组合!。。依此类推。
      

  4.   

    要下班了,给个随机数处理的东东。首先声明,下面的方法“Pushstr”还有问题,就是输入的单词里面有重复字母的话,就会“死循环”,原因我是对单个字母本身进行标记(MARK)。解决思路是,单词字符串转换为数组后,随机取数组元素,对单个字母数组元素下标作标记,而不是对字母本身进行标记,这样就能够避免重复字母单词输入发生错误。有时间再完善。<script type=text/javascript>String.prototype.Arrrange = function(m) {
           var n = this.length, m = m || n;
           var x = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(n);
           var y = function(j){return j > 0 ? arguments.callee(j - 1) * j : 1}(n - m);
           return x / y
    }
    String.prototype.Pushstr = function(m) {
           var a = this.split(""), l = a.length;
           var k = {}, r = [], m = m || this.length;
           while (r.length < m) {
                  var q = a[l * Math.random() >> 0];
                  ! k[q] && r.push(q) && (k[q] = !0);
           }
           var s = r.join(""); 
           r.length = 0;
           return s
    }
    String.prototype.Ranging = function(m) {
           var K = {}, R = [], M = this.Arrrange(m);
           while (R.length < M) {
                  var Q = this.Pushstr(m)
                  ! K[Q] && R.push(Q) && (K[Q] = !0);
           }
           return R
    }alert("abcd".Ranging());
    alert("abcd".Ranging(3))
    </script>