我想要实现的是将一个面板分配给其中面板数量最少的列,如果其中两个面板具有相同数量的面板,那么我将第一列插入并插入那里。我试图实现这一点,我将在下面展示,但我想首先解决我遇到的问题。我知道我的代码可能有很多缺陷,所以我愿意接受如何让它变得更好的建议。所以我通过firebug得到的错误是
TypeError: columns[leastItems] is undefined
return columns[leastItems].id;
这是我实施的javascript代码:
function DashboardAllocation() {
var columns = document.querySelectorAll('.col-md-4.column');
var noElemsInCol = new Array(columns.length);
//Get count of children in each column into array
for (var columnNumber = 0; columnNumber < columns.length; columnNumber++) {
noElemsInCol.push(countChildren(columns[columnNumber]));
}
//Compare all values to see if they are all the same or if the first column is 0
if (compareAllValues(noElemsInCol) || countChildren(columns[0] === 0)) {
//if it is then return the first columns id
return columns[0].id;
}
//Reference http://www.programmingsimplified.com/c/source-code/c-program-find-minimum-element-in-array
var leastItems = 1;
var minimum = countChildren(columns[0]);;
for (var i = 1; i < noElemsInCol.length; i++) {
if (noElemsInCol[i] < minimum) {
minimum = noElemsInCol[i];
leastItems = i + 1;
}
}
return columns[leastItems].id;
}
//Compares all the values in the array to check if they are equal
//Reference http://stackoverflow.com/questions/9973323/javascript-compare-3-values
function compareAllValues(a) {
for (var i = 0; i < a.length; i++) {
if (a[i] === null) { return false }
for (var j = 0; j < i; j++) {
if (a[j] !== a[i]) { return false }
}
}
return true;
}
function countChildren(Nodes) {
var childrenCount = 0;
for (var nodeType in Nodes.childNodes) {
//if the nodetype is an element then we will add one
if (nodeType == Node.ELEMENT_NODE) {
childrenCount++;
}
}
return childrenCount;
}
我已经引用了我从中获取代码的来源,并希望有助于了解我的来源并了解我要做的事情
答案 0 :(得分:1)
由于数组leastItems
的索引columns
超出范围,您遇到问题。
目前,您正在尝试使用[5]
变量
leastItems
数组中出现错误
所以要么使用改变
var leastItems = 0;
或,使用
return columns[leastItems -1 ].id;