2017-05-23 45 views
1

我非常沮丧于一个项目中,如果表中有重复的元素,我想隐藏它们。我发现重复没有问题。当我尝试隐藏重复项时,问题就开始了。我使用的是没有任何框架工程或库的香草JavaScript。我得到这个很难破译的错误。表中的元素由于未被捕获的错误而未被读取

Uncaught Type Error: Cannot read property 'e' of undefined

e是表

我没有在我的HTML任何硬编码的数据第一个重复的元素 - 这是所有的JavaScript。我从来没有这样做过,所以我想我会伸出一些帮助。我的代码如下。

欣赏您的帮助提前。

var data = [ 
 
    ['e', 0, 1, 2, 3, 4], 
 
    ['a', 54312, 235, 5, 15, 4], 
 
    ['a', 6, 7, 8, 9, 232], 
 
    ['a', 54, 11235, 345, 5, 6], 
 
    ['b', 0, 1, 2, 3, 4], 
 
    ['b', 54312, 235, 5, 15, 4], 
 
    ['c', 62, 15, 754, 93, 323], 
 
    ['d', 27, 11235, 425, 18, 78], 
 
    ['d', 0, 1, 2, 3, 4], 
 
    ['d', 54312, 235, 5, 15, 4], 
 
    ['e', 6, 7, 8, 9, 232], 
 
    ['e', 54, 11235, 345, 5, 6], 
 
    ['e', 0, 1, 2, 3, 4], 
 
    ['e', 54312, 235, 5, 15, 4], 
 
    ['e', 62, 15, 754, 93, 323], 
 
    ['e', 27, 11235, 425, 18, 78] 
 
]; 
 

 

 

 

 

 
//Create a HTML Table element. 
 
var table = document.createElement("TABLE"); 
 
var elems = document.getElementsByClassName("tableRow"); 
 

 

 
//Get the count of columns. 
 
var columnCount = data[0].length; 
 

 

 
//Add the data rows. 
 

 
for (var i = 0; i < data.length; i++) { 
 
    var row = table.insertRow(-1); 
 
    for (var j = 0; j < columnCount; j++) { 
 
    //Searching for duplicates    
 
    var num = data[i][0]; 
 
    for (var otherRow = i + 1; otherRow < data.length; otherRow++) { 
 
     var dup = data[otherRow][0]; 
 
     console.log("What is the dup" + dup); 
 
     if (num === dup) { 
 
     console.log("duplicate"); 
 
     elems.data[dup].style.display = "none"; 
 

 
     } 
 
    } 
 

 

 
    var cell = row.insertCell(-1); 
 
    cell.innerHTML = data[i][j]; 
 
    cell.innerHtml = myZero; 
 

 
    } 
 
} 
 

 

 
var dvTable = document.getElementById("dvTable"); 
 
dvTable.innerHTML = ""; 
 
dvTable.appendChild(table);

+0

嗨是否有任何其他方式来隐藏这些元素使用JavaScript或绕过这个,你可以想到的? – user2280852

+0

我确实有一个html文档,但那里没有数据,表中的所有数据都来自我填充到表中的数组。 – user2280852

+0

变量'data'和'elems'在代码中没有任何关系。 'elems'的值是一个DOM元素的'NodeList',它没有一个名为'data'的属性,因此当你尝试在属性'e'中使用属性'e'时不存在的对象('elems.data') –

回答

0

你可以单独去重和实际创建从您的数据元素。使用Array.filter您可以删除所有重复项,以便在插入时不必担心。

var data = [ 
 
    ['e', 0, 1, 2, 3, 4], 
 
    ['a', 54312, 235, 5, 15, 4], 
 
    ['a', 6, 7, 8, 9, 232], 
 
    ['a', 54, 11235, 345, 5, 6], 
 
    ['b', 0, 1, 2, 3, 4], 
 
    ['b', 54312, 235, 5, 15, 4], 
 
    ['c', 62, 15, 754, 93, 323], 
 
    ['d', 27, 11235, 425, 18, 78], 
 
    ['d', 0, 1, 2, 3, 4], 
 
    ['d', 54312, 235, 5, 15, 4], 
 
    ['e', 6, 7, 8, 9, 232], 
 
    ['e', 54, 11235, 345, 5, 6], 
 
    ['e', 0, 1, 2, 3, 4], 
 
    ['e', 54312, 235, 5, 15, 4], 
 
    ['e', 62, 15, 754, 93, 323], 
 
    ['e', 27, 11235, 425, 18, 78] 
 
]; 
 

 

 
var alreadyFound = []; 
 

 
data = data.filter(function(item, pos, arr) { 
 
    var key = item[0]; 
 
    // If we have already found this character, then skip. 
 
    if (alreadyFound.indexOf(key) > -1) return false; 
 
    // Otherwise, add this char to alreadyFound and include the item. 
 
    alreadyFound.push(key); 
 
    return true; 
 
}); 
 

 

 
//Create a HTML Table element. 
 
var table = document.createElement("TABLE"); 
 
var elems = document.getElementsByClassName("tableRow"); 
 

 

 
//Get the count of columns. 
 
var columnCount = data[0].length; 
 

 

 
//Add the data rows. 
 

 
for (var i = 0; i < data.length; i++) { 
 
    var row = table.insertRow(-1); 
 
    for (var j = 0; j < columnCount; j++) { 
 
    var cell = row.insertCell(-1); 
 
    cell.innerHTML = data[i][j]; 
 
    } 
 
} 
 

 

 
var dvTable = document.getElementById("dvTable"); 
 
dvTable.innerHTML = ""; 
 
dvTable.appendChild(table);
<div id="dvTable"></div>

+0

嗨谢谢你尝试,但这不会为我正在努力完成的是哪些是检查上一行重复不是所有重复在表 – user2280852

+0

嗨我试过上面的multiDimlUniq逻辑,但它不适合我。当然,我将阵列的名称修改为地雷。我不知道我明白减少是什么。 – user2280852

+0

@ user2280852“如果表中有重复的元素,我想隐藏它们。” - 我觉得我错过了一些背景。你能否修改你的原始问题以包含你所需要的?目前没有任何内容提到你只想去除特定行而不是所有行。 –

0

我用红色水银同意。你首先需要删除数组中的重复项。 红色水星答案是完全有效的,但这里是一个肮脏的快速多维阵列重复数据删除功能,我正在使用这种东西。

var data = [ 
    ['e', 0, 1, 2, 3, 4], 
    ['a', 54312, 235, 5, 15, 4], 
    ['a', 6, 7, 8, 9, 232], 
    ['a', 54, 11235, 345, 5, 6], 
    ['b', 0, 1, 2, 3, 4], 
    ['b', 54312, 235, 5, 15, 4], 
    ['c', 62, 15, 754, 93, 323], 
    ['d', 27, 11235, 425, 18, 78], 
    ['d', 0, 1, 2, 3, 4], 
    ['d', 54312, 235, 5, 15, 4], 
    ['e', 6, 7, 8, 9, 232], 
    ['e', 54, 11235, 345, 5, 6], 
    ['e', 0, 1, 2, 3, 4], 
    ['e', 54312, 235, 5, 15, 4], 
    ['e', 62, 15, 754, 93, 323], 
    ['e', 27, 11235, 425, 18, 78] 
]; 

function multiDimlUniq(arr) { 
    var uniques = []; 
    var founds = {}; 
    for (var i = 0, l = arr.length; i < l; i++) { 
     var s = JSON.stringify(arr[i]); 
     if (founds[s]) { 
      continue; 
     } 
     uniques.push(arr[i]); 
     founds[s] = true; 
    } 
    return uniques; 
} 

var reduced = multiDimlUniq(data) 
相关问题