为什么javascript对象会出现这种情况

为什么javascript对象会出现这种情况,javascript,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++) {

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

 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;
     }
这将产生以下输出

 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;
     }

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

注意
“未定义”!=未定义的
。您期望的输出和提供给程序的输入都不清楚。我认为您需要将
bypass[a[I]==“未定义的”
更改为
typeof bypass[a[I]==“未定义的”
HTML在哪里?在使用
文档时,如果不知道主体中有什么,我无法测试它。getElementById()
。请提供一个你的问题的简要说明。谢谢。html只是一个预标记集,id设置为res:
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,