三维阵列如何使用';每';javascript中的函数

三维阵列如何使用';每';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]

三维数组如何使用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][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()
返回
false

Javascript没有真正的多维数组,所有数组都是一维的。但是,数组的元素可以是任何类型,您所做的是创建一个数组,其元素是其他数组,并且这些数组也将数组作为元素

但是数组函数如<代码>数组.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”不同的原因