【问题标题】:javascript array duplicate in another arrayjavascript数组在另一个数组中重复
【发布时间】:2013-01-17 05:36:18
【问题描述】:

假设我在 javascript 中有这个数组

ar = ['C241C12A-45FD-40FF-B26E-B879107E584D||20',
      'AB1BB99D-4396-415A-A5D8-1BEF3E0149CE||33',
      'ADE54113-53D1-4F26-A01C-48EBE37E3CE8||85',
      'DB500FD1-5988-4202-A4AA-727AC29AC67A||85',
      '8A8EAB5A-E0D2-4AA8-96A0-42686FF5EB0C||10',
      '50C29E8A-16C7-4FC2-A186-C3D65F23C627||200',
      '70C79BBB-14C7-4F34-346B-CSSSDFVFZZZ7||200'
    ];

有没有办法得到这样的数组

newarray1 = [
      'ADE54113-53D1-4F26-A01C-48EBE37E3CE8||85',
      'DB500FD1-5988-4202-A4AA-727AC29AC67A||85'
      ];
 newarray2 = [
      '50C29E8A-16C7-4FC2-A186-C3D65F23C627||200',
      '70C79BBB-14C7-4F34-346B-CSSSDFVFZZZ7||200'
      ];

管道符号之后的重复值,获取该值并基于该值形成一个新数组

【问题讨论】:

  • 遍历条目并创建新数组是一种方法。不确定是否有更有效的方法。
  • 您的示例似乎没有排序,10 介于 85200 之间?
  • @Bergi ..它的字符串就是为什么..删除了那一行

标签: javascript jquery arrays array-unique


【解决方案1】:
var arraysByKey = {};
for (var i=0; i<ar.length; i++) {
    var key = ar[i].split("||")[1];
    if (key in arraysByKey)
        arraysByKey[key].push( ar[i] );
    else
        arraysByKey[key] = [ ar[i] ];
}

结果 (arraysByKey) 将如下所示:

{
    "10": [
        "8A8EAB5A-E0D2-4AA8-96A0-42686FF5EB0C||10"
    ],
    "20": [
        "C241C12A-45FD-40FF-B26E-B879107E584D||20"
    ],
    "33": [
        "AB1BB99D-4396-415A-A5D8-1BEF3E0149CE||33"
    ],
    "85": [
        "ADE54113-53D1-4F26-A01C-48EBE37E3CE8||85",
        "DB500FD1-5988-4202-A4AA-727AC29AC67A||85"
    ],
    "200": [
        "50C29E8A-16C7-4FC2-A186-C3D65F23C627||200",
        "70C79BBB-14C7-4F34-346B-CSSSDFVFZZZ7||200"
    ]
}

如果您只想要存在“重复值”的数组,只需过滤结果即可:

for (var key in arraysByKey)
    if (arraysByKey[key].length < 2)
        delete arraysByKey[key];

【讨论】:

  • @Bergi 怀疑如何检查是否存在重复我的意思是` if(arraysByKey.length > 0) {` 但它给了我未定义的错误..虽然它有一些
  • @Bergi ..我认为这可以api.jquery.com/jQuery.isEmptyObject感谢您的时间..将其标记为答案
【解决方案2】:

这不是最优雅的解决方案,但它会为您提供所需数组的对象。

dupecheck = {};
dupes = {};
$.each(ar, function () {
   var num = this.split('||')[1];

   if (typeof dupecheck[num] !== 'undefined') {
      if (typeof dupes[num] === 'undefined') {
         dupes[num] = [];
         dupes[num].push(dupecheck[num]);
      }
      dupes[num].push(this);
   }

   dupecheck[num] = this;
});

http://jsfiddle.net/38wme/

【讨论】:

    【解决方案3】:
    var keyArray = {};
    
    for ( var counter = 0; counter < ar.length; counter++)
    {
      var arValue = ar[ counter ];
      var intVal = ar.split("||")[1];
    
      if ( keyArray[ intVal ] == null || keyArray[ intVal ] == undefined )
      {
        keyArray[ intVal ] = new Array();
      }
      keyArray[ intVal ].push( arValue  );
    }
    filterDuplicates();
    
    function filterDuplicates( keyArray )
    {
      for ( key in keyArray )
      {
    
      keyArray[key] = keyArray[key].filter(function(elem, pos, self) {
        return self.indexOf(elem) == pos;
      }
      }
    return keyArray();
    
    )
    

    }

    现在'keyArray'对象的每个索引值都有一个数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      相关资源
      最近更新 更多