2014-04-18 11 views
0

我正在研究一種檢測每列的數據類型並將其加到列表頂部的算法。所以我說2D矩陣和 1)我需要檢測每個元素的數據類型 2)計算每種類型矩陣列的明智總和 3)獲取每個類型列的最大值明智 4)將類型從3在各自的列在javascript中檢測每個列的數據類型預先計劃

因此,這裏的頂部是例如 enter image description here]![enter image description here

1)對於第一,我知道2層的技術。即通過jQuery

  $.each(row, function (index,item) { 
     alert(typeof(item)); //result is object instead of specific type 

2)矩陣遍歷

 for (var i=0;i<data[i].length;i++) { 
     for (var j=0;j<data1.length;j++) {  
     var r = data1[j][i]; 
     if(isFinite(r) == true &&) 
     numeric++ ; 
     else {str++;} 

我知道這是不是最好的方法,但它是在給數字字符串類型的數量和

我的工作對我來說很好知道在列表頂部有一個不偏移()的前置數據。但是,仍然不確定它對我的工作方式。

任何幫助和建議。

+0

我覺得你的描述是不夠的,知道你想做到完美的。請附上更多您想要的示例矩陣和結果數組。 – toshi

+0

有一個'splice'功能,您可以刪除/添加特定索引上的項目。 ** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)** –

+1

我沒有得到您的數據與結果。什麼是每列50和5?他們是數據的一部分嗎?通過計算每種數據類型的總和,你的意思是什麼?你的意思是計數每列中的項目數量?你的*「結果陣列」*中的最大值等等? – user13500

回答

0

不知道你的最終目標是什麼。有人可能會說一列是字符串如果的任何的值是一個字符串,並且數字只有在所有項是數字。

小心使用變量污染全局空間。通常你會限制在封閉的範圍內。

更多字符串或更多數字也必須考慮在計數等於案件。例如。五個數字和五個字符串。

下面可能是一個開始:

// Should be expanded to fully meet needs. 
function isNumber(n) { 
    return !isNaN(n + 0) /* && varius */; 
} 

// Count types of data in column. 
// Return array with one object for each column. 
function arrTypeStat(ar) { 
    var type = [], i, j; 
    // Loop by column 
    for (i = 0; i < ar[0].length; ++i) { 
     // Type-stats for column 'i' 
     type[i] = {num: 0, str: 0}; 
     // Loop rows for current column. 
     for (j = 1; j < ar.length; ++j) { 
      if (isNumber(ar[j][i])) 
       ++type[i].num; 
      else 
       ++type[i].str; 
     } 
    } 
    return type; 
} 

// Add a row after header with value equal to 'num' or 'str' depending 
// on which type is most frequent. Favoring string if count is equal. 
function arrAddColType(ar) { 
    var type = arrTypeStat(ar); 
    // Add new array as second item in 'ar' 
    // as in: add a new (empty) row. This is the row to be filled 
    // with data types. 
    ar.splice(1, 0, []); 
    // Note: 
    // Favour string over number if count is equal. 
    for (i = 0; i < type.length; ++i) { 
     ar[1][i] = type[i].num > type[i].str ? 'num' : 'str'; 
    } 
    return ar; 
} 

Sample fiddle.使用控制檯,F12,查看測試結果。請注意,在此示例中,數字表示爲帶引號和不帶引號。

// Sample array. 
var arrTest = [ 
    ['album','artist','price'], 
    [50,5,'50'],  
    [5,5,'5'], 
    ['Lateralus', 'Tool', '13'], 
    ['Ænima','Tool','12'], 
    ['10,000 days','Tool',14] 
]; 

// Test 
var test = arrAddColType(arrTest); 

// Log 
console.log(
    JSON.stringify(test) 
    .replace(/],\[/g, '],\n[')); 

產量:

[["album","artist","price"], 
["str","str","num"], 
[50,5,"50"], 
[5,5,"5"], 
["Lateralus","Tool","13"], 
["Ænima","Tool","12"], 
["10,000 days","Tool",14]] 
相關問題