function unusedDigits(...a){
  return `0123456789`.split('').filter(
    b => `${a}`.split('').indexOf(b) == -1
  ).join('');
}

document.write(unusedDigits(12345))    






什么是${a}
什么是=>


如果有人可以为我分解此代码,那就太好了!

最佳答案

1,什么是$ {a}


这是新JavaScript template string(由ES2015添加)的替代。它交换发生位置的a值。可以接受任意表达式。


  2,什么是=>


这是ES2015 arrow function

您没有要求,但是函数声明中...参数之前的a是一个“ rest operator”,它表示“请作为数组提供给函数的参数的其余部分。


  如果有人可以为我分解此代码,那就太好了!


它返回一个字符串,其中包含不以传递给它的任何参数的字符串形式出现的数字:


unusedDigits函数接受任意数量的参数,它将作为通过a参数访问的数组接收(由于...参数的声明中的ES2015 a rest运算符)。
它接受一串数字0-9,并将其拆分以创建一个数组(例如['0', '1', ...])。
然后,它通过filter函数循环遍历该数组,得到一个新数组,其中仅包含filter回调所说的条目。
filter回调(ES2015箭头函数)使用ES2015模板字符串创建一个包含a数组的字符串。由于这涉及隐式调用a.toString(),因此最终会隐式执行a.join(",")(因为Array#toString会这样做),然后检查所检查的数字(b)是否出现在结果字符串中。 (这不是很有效;没有理由每次都重新创建字符串,也没有理由在此处使用模板字符串。)仅当数字不在字符串中时,它才返回真实值(indexOf返回了)。
然后,它从剩余的数字开始在字符串的末尾组装一个字符串并返回。


这是更有效的版本FWIW:Live Copy on Babel's REPL

let unusedDigits = (function() {
    const digits = [0,1,2,3,4,5,6,7,8,9];

    return function unusedDigits(...a) {
        let astring = String(a);
        return digits.filter(b => astring.indexOf(b) == -1).join("");
    };
})();

console.log(unusedDigits(12345));


与ES5中相同的功能:

var unusedDigits = (function() {
    var digits = [0,1,2,3,4,5,6,7,8,9];
    var slice = Array.prototype.slice;

    return function unusedDigits() {
        var astring = String(slice.call(arguments));
        return digits.filter(function(b) { return astring.indexOf(b) == -1}).join("");
    };
})();


-1事物将伪数组slice转换为真实数组。)



var unusedDigits = (function() {
    var digits = [0,1,2,3,4,5,6,7,8,9];
    var slice = Array.prototype.slice;

    return function unusedDigits() {
        var astring = String(slice.call(arguments));
        return digits.filter(function(b) { return astring.indexOf(b) == -1}).join("");
    };
})();

snippet.log(unusedDigits(12345));

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

10-05 20:42