三维阵列如何使用';每';javascript中的函数
三维数组如何使用each函数,结果很奇怪:三维阵列如何使用';每';javascript中的函数,javascript,Javascript,三维数组如何使用each函数,结果很奇怪: var foo = []; foo[0] = []; foo[1] = []; foo[0][0] = []; foo[0][1] = []; foo[1][0] = []; foo[1][1] = []; foo[0][0][0] = "kanon"; foo[0][0][1] = "JOJO"; foo[0][1][0] = "Dio"; foo[0][1][1] = "Sort"; foo[1][0][0] = "What"; foo[1][0]
var foo = [];
foo[0] = [];
foo[1] = [];
foo[0][0] = [];
foo[0][1] = [];
foo[1][0] = [];
foo[1][1] = [];
foo[0][0][0] = "kanon";
foo[0][0][1] = "JOJO";
foo[0][1][0] = "Dio";
foo[0][1][1] = "Sort";
foo[1][0][0] = "What";
foo[1][0][1] = "Gary";
foo[1][1][0] = "Tofu";
foo[1][1][1] = "bili";
var foo2 = ["JOJO","JOJO","mon","ti","JOJO"];
function isJOJO(x){
if(x === "JOJO"){
document.write(x + " is JOJO. <br>");
return true;
}else{
document.write(x + " is not JOJO. <br>");
return false;
}
}
document.write(foo.every(isJOJO));
document.write("<br><br>");
document.write(foo2.every(isJOJO));
一维数组foo2的结果是正确的,但三维数组的结果不是
我定义三维数组foo的方法是错误的吗
为什么它只是排序,甚至打印kanon和Dioo,这不是JOJO
或者谁能给我推荐另一本官方书籍或网站,我现在正在使用这本书面向对象的JavaScript第二版,作者是Stoyan Stefanov和Kumar Chetan Sharma
非常感谢^Javascript没有真正的多维数组,所有数组都是一维的。但是,数组的元素可以是任何类型,您所做的是创建一个数组,其元素是其他数组,并且这些数组也将数组作为元素
但是数组函数如<代码>数组.Trime.每个只考虑它们所给出的顶级数组,它们不递归到所包含的数组中。因此,当您尝试:
foo.every(isJOJO)
它叫
isJOJO(foo[0])
这相当于
isJOJO([["kanon","JOJO"],["Dioo","Sort"]])
这不等于
“JOJO”
,因此它返回false
,并导致each()
返回falseJavascript没有真正的多维数组,所有数组都是一维的。但是,数组的元素可以是任何类型,您所做的是创建一个数组,其元素是其他数组,并且这些数组也将数组作为元素
但是数组函数如<代码>数组.Trime.每个只考虑它们所给出的顶级数组,它们不递归到所包含的数组中。因此,当您尝试:
foo.every(isJOJO)
它叫
isJOJO(foo[0])
这相当于
isJOJO([["kanon","JOJO"],["Dioo","Sort"]])
这不等于“JOJO”
,因此它返回false
,并导致each()
返回false这两个数组实际上都是一维的。事实上,所有编程语言中的所有数组都是一维的。额外的维度只是人类对一维数组所包含内容的解释
foo
是一个普通(一维)数组,它恰好包含一个包含数组的数组。让我们重写您的代码,使其更为明显:
var foo = [];
foo[0] = [['kanon','JOJO'],['Dioo','Sort']];
foo[1] = [['What','Gary'],['Tofu',bili']];
现在更明显的是foo
只包含两个成员。碰巧这些成员是数组
因此foo.each()
将迭代foo[0]
和foo[1]
。如果需要迭代foo的内容,则需要对其调用.every()
,就像foo[0]一样。every()
两个数组实际上都是一维的。事实上,所有编程语言中的所有数组都是一维的。额外的维度只是人类对一维数组所包含内容的解释
foo
是一个普通(一维)数组,它恰好包含一个包含数组的数组。让我们重写您的代码,使其更为明显:
var foo = [];
foo[0] = [['kanon','JOJO'],['Dioo','Sort']];
foo[1] = [['What','Gary'],['Tofu',bili']];
现在更明显的是foo
只包含两个成员。碰巧这些成员是数组
因此foo.each()
将迭代foo[0]
和foo[1]
。如果需要迭代foo的内容,则需要对其调用.every()
,就像foo[0]一样。every()
您可能需要三维查找:
var firstJOJO=foo.find(arr=>arr.find(inner=>inner.find(isJOJO)));
您可能希望以三维方式查找:
var firstJOJO=foo.find(arr=>arr.find(inner=>inner.find(isJOJO)));
正如其他答案所描述的,foo
的顶级元素是数组,因此如果您想查看其中的值,可以使用递归:
var foo=[];
foo[0]=[];
foo[1]=[];
foo[0][0]=[];
foo[0][1]=[];
foo[1][0]=[];
foo[1][1]=[];
foo[0][0][0]=“卡农”;
foo[0][0][1]=“JOJO”;
foo[0][1][0]=“Dio”;
foo[0][1][1]=“排序”;
foo[1][0][0]=“什么”;
foo[1][0][1]=“Gary”;
foo[1][1][0]=“豆腐”;
foo[1][1][1]=“bili”;
var foo2=[“JOJO”、“JOJO”、“mon”、“ti”、“JOJO”];
函数isJOJO(x){
if(数组isArray(x)){
返回x.every(Isjojojo);
}else if(x==“JOJO”){
log(x+“是JOJO.”);
返回true;
}否则{
log(x+“不是JOJO”);
返回false;
}
}
console.log(foo.every(isjojojo));
console.log(foo2.every(isjojojo))
正如其他答案所描述的,foo
的顶级元素是数组,因此如果您想查看其中的值,可以使用递归:
var foo=[];
foo[0]=[];
foo[1]=[];
foo[0][0]=[];
foo[0][1]=[];
foo[1][0]=[];
foo[1][1]=[];
foo[0][0][0]=“卡农”;
foo[0][0][1]=“JOJO”;
foo[0][1][0]=“Dio”;
foo[0][1][1]=“排序”;
foo[1][0][0]=“什么”;
foo[1][0][1]=“Gary”;
foo[1][1][0]=“豆腐”;
foo[1][1][1]=“bili”;
var foo2=[“JOJO”、“JOJO”、“mon”、“ti”、“JOJO”];
函数isJOJO(x){
if(数组isArray(x)){
返回x.every(Isjojojo);
}else if(x==“JOJO”){
log(x+“是JOJO.”);
返回true;
}否则{
log(x+“不是JOJO”);
返回false;
}
}
console.log(foo.every(isjojojo));
console.log(foo2.every(isjojojo))代码>Javascript本身不支持多维数组。它执行n次数组。因此,在您的例子中,foo是一个数组数组,每个子数组都是一个数组数组
因此,调用foo.every(isjojojo)时传递给isJOJO函数的值是数组的数组。这就是为什么它与“JOJO”不同的原因
您需要测试传入函数的值是否为数组,如果为数组,则运行:x.every(isjojojo)。Javascript本身不执行多维数组。它执行n次数组。因此,在您的例子中,foo是一个数组数组,每个子数组都是一个数组数组
因此,调用foo.every(isjojojo)时传递给isJOJO函数的值是数组的数组。这就是为什么它与“JOJO”不同的原因