有人可以向我展示我需要用来动态创建二维Javascript数组的javascript,如下所示吗?
所需的数组内容:
[["test1","test2","test3","test4","test5"],["test6","test7","test8","test9","test10"]]
来自alert(outterArray)的当前无效输出:
"test6","test7","test8","test9","test10","test6","test7","test8","test9","test10"
JavaScript代码:
var outterArray = new Array();
var innerArray = new Array();
var outterCount=0;
$something.each(function () {
var innerCount = 0;//should reset the inner array and overwrite previous values?
$something.somethingElse.each(function () {
innerArray[innerCount] = $(this).text();
innerCount++;
}
outterArray[outterCount] = innerArray;
outterCount++;
}
alert(outterArray);
答案 0 :(得分:7)
这非常剪切和干燥,只需设置一个嵌套循环:
var count = 1;
var twoDimensionalArray =[];
for (var i=0;i<2;i++)
{
var data = [];
for (var j=0;j<5;j++)
{
data.push("Test" + count);
count++;
}
twoDimensionalArray.push(data);
}
答案 1 :(得分:5)
听起来您希望将每个$something
元素的文本数组映射到外部锯齿状数组中。如果是,请尝试以下
var outterArray = [];
$something.each(function () {
var innerArray = [];
$(this).somethingElse.each(function () {
innerArray.push($(this).text());
});
outterArray.push(innerArray);
});
alert(outterArray);
答案 2 :(得分:2)
更灵活的方法是使用原始对象,它们的使用方式与字典相似。动态消耗品和更多选项来定义索引(作为字符串)。
这里有一个例子:
var myArray = {};
myArray[12]="banana";
myArray["superman"]=123;
myArray[13]={}; //here another dimension is created
myArray[13][55]="This is the second dimension";
答案 3 :(得分:1)
您不需要自己跟踪数组长度;运行时为您维护“.length”属性。最重要的是,有.push()
方法将元素添加到数组的末尾。
// ...
innerArray.push($(this).text());
// ...
outerArray.push(innerArray);
要制作新数组,只需使用[]
:
innerArray = []; // new array for this row
“外部”只有一个“t”: - )
答案 4 :(得分:1)
[SEE IT IN ACTION ON JSFIDDLE]如果$ something变量是jQuery搜索,你可以像这样使用.map()函数:
var outterArray = [];
var outterArray = $('.something').map(function() {
// find .somethingElse inside current element
return [$(this).find('.somethingElse').map(function() {
return $(this).text();
}).get()]; // return an array of texts ['text1', 'text2','text3']
}).get(); // use .get() to get values only, as .map() normally returns jQuery wrapped array
// notice that this alert text1,text2,text3,text4,text5,text6
alert(outterArray);
// even when the array is two dimensional as you can do this:
alert(outterArray[0]);
alert(outterArray[1]);
HTML:
<div class="something">
<span class="somethingElse">test1</span>
<span class="somethingElse">test2</span>
<span class="somethingElse">test3</span>
</div>
<div class="something">
<span class="somethingElse">test4</span>
<span class="somethingElse">test5</span>
<span class="somethingElse">test6</span>
</div>
在这里,您可以看到它在jsFiddle中使用您的预期结果:http://jsfiddle.net/gPKKG/2/
答案 5 :(得分:0)
我最近在制作Google电子表格时遇到了类似的问题,并提出了类似于BrianV的答案:
// 1st nest to handle number of columns I'm formatting, 2nd nest to build 2d array
for (var i = 1; i <= 2; i++) {
tmpRange = sheet.getRange(Row + 1, Col + i, numCells2Format); // pass/fail cells
var d2Arr = [];
for (var j = 0; j < numCells2Format; j++) {
// 1st column of cells I'm formatting
if ( 1 == i) {
d2Arr[j] = ["center"];
// 2nd column of cells I'm formatting
} else if ( 2 == i ) {
d2Arr[j] = ["left"];
}
}
tmpRange.setHorizontalAlignments( d2Arr );
}
所以,基本上,我必须进行赋值d2Arr[index]=["some string"]
才能构建我正在寻找的多维数组。由于我想格式化的单元格数量可以在不同工作表之间变化,我希望它能够推广。我正在研究的案例需要一个15维数组。将1-D阵列分配给1-D阵列中的元素最终形成了我需要的15-D阵列。
答案 6 :(得分:0)
您可以使用Array.apply
Array.apply(0, Array(ARRAY_SIZE)).map((row, rowIndex) => {
return Array.apply(0, Array(ARRAY_SIZE)).map((column, columnIndex) => {
return null;
});
});`