我正在處理的是一個菜單,它根據數組長度自動更新其條目。如果將新對象添加到數組中,它會將10組對象的屬性(在本例中爲「IDnumbers」)添加到菜單中。從另一個陣列的長度調用所有可能的陣列
var arraysOfObject = [], obj = {"IDNumber": ""};
for(i = 0; i<42; i++){
arraysOfObject.push({"IDNumber": "Number " + i});}
以上是可容納42個具有特定屬性的對象的數組。
var array2 = [];
var leftOver = arraysOfObject.length % 10;
var groupsOfTen = (arraysOfObject.length - leftOver)/10;
for (var i = 0; i < groupsOfTen; i++) {
array2.push([]);
for (var j = i*10; j < i*10 + 10; j++)
array2[i].push(arraysOfObject[j]["IDNumber"]);
}
//now the leftover
if (leftOver > 0) {
array2.push([]);
for (var i = groupsOfTen*10; i < arraysOfObject.length; i++)
array2[array2.length-1].push(arraysOfObject[i]["IDNumber"]);
}
的array2
以上是存儲所有可以通過從10 arraysOfObject
被分組的可能陣列的陣列。在這種情況下,裏面有5個,因爲4個數組可以容納40個對象,而1個數組可以容納2個剩餘數。
這一切都正常工作,但將array2
放在菜單中顯示所有可能的IDnumbers
分組在一起,但不是單獨分組。我必須在其中聲明每個可能的數組,如sets = [array2[0], array2[1], array2[2], array2[3], array2[4]];
如果有第6個可能的數組,因爲對象#51已被添加到arraysOfObject
,我必須輸入它與array2[5]
。
我不希望它依賴於我的輸入,但它知道可能的數組數量,並且它會自動在sets
中顯示它。我怎麼做?
var gui = new dat.GUI();
var guiData = function() {
this.message = "Dat.Gui menu";
this.system = 0;
this.Sets = 0;
};
var data = new guiData();
sets = [array2[0], array2[1], array2[2], array2[3], array2[4], array2[5]];
gui.add(data, 'message', 'Dat.Gui Menu!');
gui.add(data, 'system', {
"1": 0,
"2": 1,
"3": 2,
"4": 3,
"5": 4,
"6": 5,
}).name('system #').onChange(function(value) {
updateSets(value);
});
gui.add(data, 'Sets', sets[0]).onChange();
function updateSets(id) {
var controller = gui.__controllers[2];
controller.remove();
gui.add(data, 'Sets', sets[id]).onChange();
data.Sets = 0;
gui.__controllers[2].updateDisplay();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.1/dat.gui.min.js"></script>
<script>
var arraysOfObject = [], obj = {"IDNumber": ""};
for(i = 0; i<42; i++){
arraysOfObject.push({"IDNumber": "Number " + i});}
var array2 = [];
var leftOver = arraysOfObject.length % 10;
var groupsOfTen = (arraysOfObject.length - leftOver)/10;
for (var i = 0; i < groupsOfTen; i++) {
array2.push([]);
for (var j = i*10; j < i*10 + 10; j++)
array2[i].push(arraysOfObject[j]["IDNumber"]);
}
//now take care of the leftover
if (leftOver > 0) {
array2.push([]);
for (var i = groupsOfTen*10; i < arraysOfObject.length; i++)
array2[array2.length-1].push(arraysOfObject[i]["IDNumber"]);
}
</script>
一切我所希望得到的。萬分感謝。 – TheNuttyStudent