Javascript - 检查数组前瞻匹配
Javascript - check array lookahead matching
我正在根据电子表格数据制作 Google 幻灯片。每张幻灯片都会包含一件衣服的详细信息,例如连衣裙或连身裤,但是当我需要在一页上同时显示上衣和裙子的详细信息时,我 运行 遇到了问题。
在源电子表格中,我使用 1、2、3 表示法对幻灯片进行排序,如果有次要产品,我使用 1.1、2.1、3.1 等,因此数组中的顺序最终为正在
[1, 2, 2.1, 3, 4, 4.1 ] //...etc
我想要做的是在一次调用中将一张幻灯片的所有详细信息传递给幻灯片 API。为此,我想在创建“2”幻灯片的调用中传递“2.1”数组。为此,我需要对数组进行前瞻。
这是我用来测试的代码,我的 JSFiddle 在这里。
var foo = new Array();
var firstProduct;
var secondProduct = "";
var order;
foo = [
[1, "one2", "one3"],
[2, "two2", "two3"],
[2.1, "two21", "two31"],
[3, "three2", "three3"]
];
for (var i = 0; i < foo.length; i++) {
firstProduct = foo[i][0];
if (foo[i][0] <= foo.length) {
secondProduct = foo[i + 1][0];
if (typeof secondProduct !== 'undefined' && Math.floor(firstProduct) == Math.floor(secondProduct)) {
alert("Match " + firstProduct + " " + secondProduct);
i++;
}
else {
alert("No match - firstProduct" + firstProduct);
}
}
else {
alert("last " + firstProduct);
}
}
如您所见,它会引发此错误:
VM3349:59 未捕获类型错误:无法读取未定义的 属性“0”
在 window.onload (VM3349:59)
您正在访问未定义的 foo[i+1],您可以
var foo = new Array();
var firstProduct;
var secondProduct = "";
var order;
foo = [
[1, "one2", "one3"],
[2, "two2", "two3"],
[2.1, "two21", "two31"],
[3, "three2", "three3"]
];
for (var i = 0; i < foo.length; i++) {
firstProduct = foo[i][0];
if (foo[i][0] <= foo.length && foo[i+1]) {
secondProduct = foo[i + 1][0];
if (typeof secondProduct !== 'undefined' && Math.floor(firstProduct) == Math.floor(secondProduct)) {
alert("Match " + firstProduct + " " + secondProduct);
i++;
}
else {
alert("No match - firstProduct" + firstProduct);
}
}
else {
alert("last " + firstProduct);
}
}
这将 运行 直到它们存在 foo[i+1]
我正在根据电子表格数据制作 Google 幻灯片。每张幻灯片都会包含一件衣服的详细信息,例如连衣裙或连身裤,但是当我需要在一页上同时显示上衣和裙子的详细信息时,我 运行 遇到了问题。
在源电子表格中,我使用 1、2、3 表示法对幻灯片进行排序,如果有次要产品,我使用 1.1、2.1、3.1 等,因此数组中的顺序最终为正在
[1, 2, 2.1, 3, 4, 4.1 ] //...etc
我想要做的是在一次调用中将一张幻灯片的所有详细信息传递给幻灯片 API。为此,我想在创建“2”幻灯片的调用中传递“2.1”数组。为此,我需要对数组进行前瞻。
这是我用来测试的代码,我的 JSFiddle 在这里。
var foo = new Array();
var firstProduct;
var secondProduct = "";
var order;
foo = [
[1, "one2", "one3"],
[2, "two2", "two3"],
[2.1, "two21", "two31"],
[3, "three2", "three3"]
];
for (var i = 0; i < foo.length; i++) {
firstProduct = foo[i][0];
if (foo[i][0] <= foo.length) {
secondProduct = foo[i + 1][0];
if (typeof secondProduct !== 'undefined' && Math.floor(firstProduct) == Math.floor(secondProduct)) {
alert("Match " + firstProduct + " " + secondProduct);
i++;
}
else {
alert("No match - firstProduct" + firstProduct);
}
}
else {
alert("last " + firstProduct);
}
}
如您所见,它会引发此错误:
VM3349:59 未捕获类型错误:无法读取未定义的 属性“0” 在 window.onload (VM3349:59)
您正在访问未定义的 foo[i+1],您可以
var foo = new Array();
var firstProduct;
var secondProduct = "";
var order;
foo = [
[1, "one2", "one3"],
[2, "two2", "two3"],
[2.1, "two21", "two31"],
[3, "three2", "three3"]
];
for (var i = 0; i < foo.length; i++) {
firstProduct = foo[i][0];
if (foo[i][0] <= foo.length && foo[i+1]) {
secondProduct = foo[i + 1][0];
if (typeof secondProduct !== 'undefined' && Math.floor(firstProduct) == Math.floor(secondProduct)) {
alert("Match " + firstProduct + " " + secondProduct);
i++;
}
else {
alert("No match - firstProduct" + firstProduct);
}
}
else {
alert("last " + firstProduct);
}
}
这将 运行 直到它们存在 foo[i+1]