我正在研究一个将两个数字数组作为参数的函数。我使用三元运算符来确定两个数组的长度是否相同。如果没有,我将运行一个if条件循环来确定哪个更长,并将参数名设置为名为longer
的变量的属性,这样我就可以在不知道它是哪个的情况下访问最多的元素。这是一个示例。
someFunc(numListA, numListB){
let isEqual = (numListA.length == numListB.length) ? true : false;
let longer = '',
shorter = '',
difference = [longer].length - [shorter].length,
appendNums = [];
if(!isEqual){
if(numListA.length > numListB.length){
longer = 'numListA'; shorter = 'numListB';
}
else{ longer = 'numListB'; shorter = 'numListA'; }
appendNums = [...[longer].splice([longer].length-difference-1, [longer].length)];
}
........
}
console.log()
变量appendNums
时,它以字符串形式返回longer
变量中的文本,而不是将变量插入我可以访问的位置。
我希望函数的这一部分要做的是确定两个数组之间的长度差,并取最长的结尾项并将其存储在appendNums
变量中。我唯一想做的就是尝试使用反引号而不是引号使它们成为模板文字,但是结果仍然相同。如何获得括号符号以插入变量名以便可以访问它?
答案 0 :(得分:2)
首先,这段代码
difference = [longer].length - [shorter].length
将始终为0,因为您正在访问新创建的数组中的属性.length
,该数组仅包含一个元素-longer
或shorter
(也可能是数组,但这只是新数组中的一项,对父数组的长度不起作用。
我认为您通过使用通过计算属性使用变量名称访问数组来过度考虑问题。您已经在变量中拥有两个数组,并且都易于访问,并且您确切知道要比较的两个变量,因此即使可以使用计算属性访问也没有意义。
要做您想要实现的目标的最简单算法如下所示:
如您所见,您不需要任何疯狂的语法或技巧。这是该算法的参考实现:
function getTrailingItems(first, second) {
if (first.length === second.length) {
// They are equal -> no trailing items exist
return []
}
// Determine which array of the two is longer and which one is shorter.
// We will use this to make the final slice.
const longer = first.length > second.length
? first
: second
const shorter = first.length > second.length
? second
: first
// Create a shallow copy of all the extra elements at the end of the longer array.
return longer.slice(shorter.length)
}
答案 1 :(得分:1)
使用实际变量代替依赖变量名。 []
语法是计算属性语法,仅适用于对象属性。
if(numListA.length > numListB.length){
longer = numListA; shorter = numListB;
}
else{
longer = numListB; shorter = numListA;
}
appendNums = [...longer.splice(longer.length-difference-1, longer.length)];
如果要依赖变量名,可以使用eval
来评估字符串变量,但是不推荐使用。
appendNums = [...eval(longer).splice(eval(longer).length-difference-1, eval(longer).length)];
答案 2 :(得分:1)
var numListA = [1, 2, 3, 4, 5];
var numListB = [12, 14, 15, 16, 18, 20];
function execFunc() {
someFunc(numListA, numListB);
}
function someFunc(numListA, numListB) {
let isEqual = (numListA.length == numListB.length) ? true : false;
let longer = '',
shorter = '',
difference = longer.length - shorter.length,
appendNums = [];
if (!isEqual) {
if (numListA.length > numListB.length) {
longer = numListA;
shorter = numListB;
} else {
longer = numListB;
shorter = numListA;
}
appendNums = [[...longer].splice([...longer].length - difference - 1, [...longer].length)];
}
console.log(appendNums);
}
<button onclick="execFunc()">Click me</button>