我无法使用比较运算符来确定是否将有效的数组名称传递给函数。功能如下:
const clear = (arrayName) => {
console.log(arrayName);
if (!arrayName) {
return null;
} else if (arrayName == !kicks || !snares || !hiHats || !rideCymbals) {
return null;
} else {
arrayName.fill = false;
}
}
正如您所看到的,该函数的目的是将数组的元素设置为false,并且有效的arrayNames是kick snares hiHats或rideCymbals。
我在console.log arrayName中获取通过arrayName传入的数组的条目,而不是比较运算符的数组名称。
如何获取数组的名称才能将其用作比较运算符?或者我应该如何解决这个问题?
提前致谢
答案 0 :(得分:1)
您需要将名称传递给string
,当您将数组传递给函数时,它将通过另一个变量在函数中引用。
没有这样的运算符来获取变量名称。您可以改为使用哈希对象,该哈希对象将根据键包含变量的name
。
尝试这样的事情
const validNames = ['kicks', 'snares', 'hiHats', 'rideCymbals'];
const kicks = [];
const map = new Map([[kicks, 'kicks']]);
const clear = (array, arrayName) => {
if (!arrayName || !validNames.includes(arrayName)) {
console.log(arrayName);
return null;
} else {
array.fill = false;
}
};
console.log(clear(kicks, map.get(kicks)));
console.log(kicks.fill)
答案 1 :(得分:0)
假设您的阵列名称是“踢”;
var kicks = [1,2,3,4,5];
这里踢是一个变量,只指向内存地址。你不能在这里取变量的名称。但你可以这样做。
var kicks = { arrayName中的: '踢', 踢:[1,2,3,4,5] }
然后将kicks.arrayName传递给您的函数进行验证。 希望这会对你有所帮助。
答案 2 :(得分:0)
这是你遇到问题的一行:
} else if (arrayName == !kicks || !snares || !hiHats || !rideCymbals) {
假设kicks
,snares
,hiHats
和riceCymbals
是现有数组,并且它们是全局变量,则需要将它们检查为字符串:
} else if ((arrayName !== "kicks") && (arrayName !== "snares") && (arrayName !== "hiHats") && (arrayName !== "rideCymbals")) {
而不是
arrayName.fill = false;
你需要
window[arrayName].fill = false;