我相对较不熟悉Google表格的自定义功能,只学习javascript。 我正在尝试创建一个自定义函数,该函数将在数组中搜索一个值并返回一个字符串(类似于vlookup)。
我想要实现的是获取针对多个数组检查的值。我写了下面的内容,但是由于某种原因,它只检查数组的第一个元素(它确实起作用,但是由于某种原因而停止了,由于我认为我什么都没改变,所以我无法弄清原因)。
第二部分仍然比较棘手,如何使它对多个数组起作用...我当时在考虑创建一个数组: depots = [depot1,depot2 ...],然后将代码更改为“ depots.length for for loop,但即使1个数组也被证明是有问题的。
var depot1 = ["device1", "device2", "device3"];
var depot1 = ["device1", "device2", "device3"];
function _depot(value) {
if (value) {
var depotCheckCase = value.toUpperCase();
for (var i = 0; i < depot1.length; i++) {
if (depotCheckCase == depot1[i]) {
return "Depot 1";
} else {
return false;
}
}
}
}
答案 0 :(得分:1)
它仅检查第一个条目,因为在return
/ if
的两个分支中都有else
,因此无论如何,第一次循环迭代都会终止该函数。
相反,将return false;
移到循环末尾。
其他一些问题:
var depot1 = ...
最终只是一个赋值(但是由于它要赋值的数组具有与第一个相同的条目,因此您可能不会注意到)。解决所有这些问题:
var depot1 = ["device1", "device2", "device3"];
function _depot(value) {
if (value) {
var depotCheckCase = value.toUpperCase();
for (var i = 0; i < depot1.length; i++) {
if (depotCheckCase == depot1[i].toUpperCase()) {
return "Depot 1";
}
}
return false;
}
}
console.log(_depot("device2")); // "Depot 1"
console.log(_depot("device8")); // false
有什么主意如何将其与检查第二/第三阵列相结合?
您有两个选择:
undefined
。由于[n]
大于或等于长度时数组上的n
会给您undefined
,因此您可以在进行toUpperCase
之前进行检查。这是第二个:
var depot1 = ["device1", "device2", "device3"];
var depot2 = ["device4", "device5"];
var depot3 = ["device6", "device7", "device8", "device9"];
function _depot(value) {
if (value) {
var depotCheckCase = value.toUpperCase();
var max = Math.max(depot1.length, depot2.length, depot3.length);
var entry;
for (var i = 0; i < max; i++) {
entry = depot1[i];
if (entry !== undefined && depotCheckCase === entry.toUpperCase()) {
return "Depot 1";
}
entry = depot2[i];
if (entry !== undefined && depotCheckCase === entry.toUpperCase()) {
return "Depot 2";
}
entry = depot3[i];
if (entry !== undefined && depotCheckCase === entry.toUpperCase()) {
return "Depot 3";
}
}
return false;
}
}
console.log(_depot("device2")); // "Depot 1"
console.log(_depot("device8")); // "Depot 3"
console.log(_depot("device5")); // "Depot 2"
console.log(_depot("device10")); // false
您可以给自己一个数组数组,然后循环执行,而不必重复逻辑。我把它留给读者作为练习。 :-)