不知道你的最终目标是什么。有人可能会说一列是字符串如果的任何的值是一个字符串,并且数字只有在所有项是数字。
小心使用变量污染全局空间。通常你会限制在封闭的范围内。
更多字符串或更多数字也必须考虑在计数等于案件。例如。五个数字和五个字符串。
下面可能是一个开始:
// 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]]
我觉得你的描述是不够的,知道你想做到完美的。请附上更多您想要的示例矩阵和结果数组。 – toshi
有一个'splice'功能,您可以删除/添加特定索引上的项目。 ** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)** –
我没有得到您的数据与结果。什么是每列50和5?他们是数据的一部分吗?通过计算每种数据类型的总和,你的意思是什么?你的意思是计数每列中的项目数量?你的*“结果阵列”*中的最大值等等? – user13500