2017-05-23 41 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) 
相關問題