为什么这会发生在javascript对象上

时间:2014-05-04 21:24:18

标签: javascript

我正在开发一个函数来映射已拆分为数组的字符串

 function arrayDups(a) // a: array to search: as in string split into array.
     {
      var unique = {}
      var dups = [];
      var seen = false;
      var bypass = {};
      for(var i = 0; i < a.length; i++)
         {
          if(bypass[a[i]] == 'undefined')
            {
             unique[a[i]] = i+',';
             bypass[a[i]] = false;
            }
          for(var k = i; k < a.length; k++)
             {
              // so the same char later will not produce duplicate records.
              if(unique[a[k]] != 'undefined' && bypass[a[k]] != 'undefined' && !bypass[a[k]])
                {
                 unique[a[k]] += k+',';
                 if(k == a.length - 1)
                   {
                    bypass[a[i]] = true
                   }
                }
             }
         }
      for(var x in unique)
         {
          dups[dups.length] = x+':'+unique[x]
         }
      return dups;
     }

这在以下上下文中进行了整理

var testCase = ('disproportionate').split('');
window.onload = function()
   {
    var test = document.getElementById('res')
        test.childNodes[0].data = arrayDups(testCase).join("\n")
   }

产生以下输出

 d:undefined0,
 i:undefined1,10,1,10,
 s:undefined2,2,2,
 p:undefined3,6,3,6,3,6,3,6,
 r:undefined4,8,4,8,4,8,4,8,4,8,
 o:undefined5,7,11,5,7,11,5,7,11,5,7,11,5,7,11,5,7,11,
 t:undefined9,14,9,14,9,14,9,14,9,14,9,14,9,14,9,14,9,14,9,14,
 n:undefined12,12,12,12,12,12,12,12,12,12,12,12,12,
 a:undefined13,13,13,13,13,13,13,13,13,13,13,13,13,13,
 e:undefined15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,

问题: 来自哪里未定义 为什么在i的每次迭代时索引位置都是重复的 k从当前i值开始,应该向前看以找到重复字符的索引值

我不想回答我自己的问题所以我通过编辑添加到原始帖子

这是我提出的

function arrayDups(a) // a: array to search: as in string split into array.
     {
      var unique = {}
      var dups = [];
      var seen = false;
      var bypass = {};
      for(var i = 0; i < a.length; i++)
         {
          if(!bypass.propertyIsEnumerable(a[i]))
            {
             unique[a[i]] = i+',';
             bypass[a[i]] = 'false';
             continue;
            }
          if(bypass.propertyIsEnumerable(a[i]) && bypass[a[i]] == 'false')
            {
             for(var k = i; k < a.length; k++)
               {
                // for every instance of a[i] == a[k] unique[a[k]] will be defined
                if(a[i] == a[k] && unique.propertyIsEnumerable(a[k]))
                  {
                   unique[a[k]] += k+',';
                  }
                if(k == a.length - 1)
                  {
                   bypass[a[i]] = 'true'
                   continue;
                  }
                }
             }
         }
      for(var x in unique)
         {
          dups[dups.length] = x+':'+unique[x]
         }
      return dups;
     }

这是输出

d:0,
i:1,10,
s:2,
p:3,6,
r:4,8,
o:5,7,11,
t:9,14,
n:12,
a:13,
e:15,

所以现在我所要做的就是剥去栏杆','

0 个答案:

没有答案