需要对这段代码进行解释

时间:2016-10-07 12:13:26

标签: javascript

我遇到了一些我无法理解的代码。

arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);

我知道"?"可以被认为是"然后"和":"除此之外。我特别不明白这一点arr.length, arr.length的意思。如果你能向我解释一下,我会感激不尽

这是完整上下文中的代码:



function dropElements(arr, func) {
  return arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);
}
    
// test here
var result = dropElements([1, 2, 3, 4], function(n) {return n >= 3;});

console.log(result)




4 个答案:

答案 0 :(得分:2)

当你需要代码解释时,它可能是一个很难写的标志。至少这样的一行需要一个解释它的评论。

相反,请考虑重写:

function dropElements(arr,func) {
    var start = arr.findIndex(func);
    if( start < 0) {
        // no match
        return [];
    }
    else {
        return arr.slice(start);
    }
}

请注意,第二个arr.length是冗余的 - 如果没有另外指定,.slice()将切换到数组的末尾。

答案 1 :(得分:1)

这样想:

if(arr.findIndex(func) >= 0) {
    startI = arr.findIndex(func);
} else {
    startI = arr.length;
}
endI = are.length;
return arr.slice(startI, endI);

......这有帮助吗?基本上?...:表现得像if else,然后整个论证后跟一个......,第二个参数。非常混乱,当人们不使用parens澄清操作顺序时,我讨厌它。

答案 2 :(得分:0)

如果我们打破这个: arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);我们会得到:arr.slice(begin, end)其中

begin = arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.lengthend = arr.length

因此,这将从begin切换到给定数组的末尾

答案 3 :(得分:0)

尝试制动它:

arr.slice(
    arr.findIndex(func) >= 0 ? arr.findIndex(func) : arr.length, // First argument for slice method
    arr.length  // Second slide argument.
);

现在让我们尝试分析一下slise的第一个参数:

arr.findIndex(func) >= 0 ?   // If the call of arr.findIndex(func) it is greater than 0
arr.findIndex(func) :        // Then return the result of this method call
arr.length                   // Other wise return the length of the arr

那么这段代码的作用是,从第一个三元运算符返回的数字开始数组切片到数组的长度。