基于Javascript中的一列从多列中删除重复项

Posted

技术标签:

【中文标题】基于Javascript中的一列从多列中删除重复项【英文标题】:Remove duplicates from multicolumns based on one column in Javascript 【发布时间】:2018-04-22 09:16:55 【问题描述】:

根据cont.id删除重复然后删除cont.id, cont.name, cont.class

var all_data = []
for (var i=0; i< data.class_ids.length ; i++) 
    var cont=data.class_ids[i];
    all_data.push(["",cont.id,cont.name,cont.classes]);

得到这样的输出 cont.id cont.name cont.classes A_1_VII VII V2 A_1_VII VII V2 A_1_VII VII V2 B_1_XIV XIV V3 B_2_XVI XVI v3


但我想要这样cont.id cont.name cont.classes A_1_VII VII V2 B_1_XIV XIV V3 B_2_XVI XVI v3

有什么方法可以在 html 中使用 id=table_data & tr 然后 check each tr with next row /tr 如果同样从表数据中删除下一行 任何帮助!

【问题讨论】:

使用array_unique 我试过了但没用,你有什么想法在 html 检查更新的问题.. 【参考方案1】:

也许这会有所帮助:

var data = [
  id: 'aaa', val1: 'sdfsd',
  id: 'aaa', val1: 'sdfsd',
  id: 'aaa', val1: 'sdfsd',
  id: 'bbb', val1: 'sdfsd',
  id: 'bbb', val1: 'sdfsd',
  id: 'ccc', val1: 'sdfsd'
]

var woDuplicates = _.uniqBy(data, 'id')

console.log(woDuplicates)
&lt;script src="https://unpkg.com/lodash"&gt;&lt;/script&gt;

【讨论】:

【参考方案2】:

ids 存储在集合中,然后仅当集合中不存在id 时将项目推入all_data

var all_data = []
var ids = new Set();
for (var i = 0; i < data.class_ids.length; i++) 
  var cont = data.class_ids[i];
  if !ids.has(cont.id) 
    ids.add(cont.id);
    all_data.push(["", cont.id, cont.name, cont.classes]);
  

有关 javascript 集的更多信息,请参阅here。集合的搜索速度比数组快得多。

【讨论】:

请记住,这是 O(n²),如果您有大量数据,性能会很差。使用哈希表存储键会导致 O(n) 性能。 @Haroldo_OK 我已经修改了代码.. 我认为它现在运行良好 你能提供data.class_ids数据的样本吗? 警报(data.class_ids);给出这个输出:[object Object],[object Object],[object Object],[object Object],[object Object] 伙计,这没有用。你从哪里得到data.class_ids?不要提醒它。只需复制并粘贴到此处即可。

以上是关于基于Javascript中的一列从多列中删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

基于另一列从一列中删除单词,然后创建并将其放入新列

EXCEL把多列数据变成一行的函数

使用单个重复列从 MySQL 数据库中删除重复项 [重复]

基于 SQL Server 中的一列透视多列

mysql 多列数据搜索出不重复的各项

SQL Server 一列或多列重复数据的查询,删除