编写一个返回数字的函数



给定不同数量的整数参数,返回其中任何一个参数中都不存在的数字。

示例:

[12, 34, 56, 78]  =>  "09"
[2015, 8, 26]     =>  "3479"

注意:结果字符串中的数字应该进行排序。

请帮忙,如何用一个简短的代码做到这一点,我应该使用哪种方法?RegEx用于比较?

function unusedDigits(numbers) {
}
console.log(unusedDigits([12, 34, 56, 78])); 
console.log(unusedDigits([2015, 8, 26]));

首先将数字连接成一个字符串:

> [2015, 8, 26].join('')
'2015826'

然后从"0123456789"中删除它们:

> [...'0123456789'].filter(ch => !'2015826'.includes(ch)).join('')
'3479'

function unusedDigits(numbers) {
const s = numbers.join('');
return [...'0123456789'].filter(ch => !s.includes(ch)).join('');
}
console.log(unusedDigits([12, 34, 56, 78])); 
console.log(unusedDigits([2015, 8, 26]));

如果输入量很大,为了获得更有效的方法,可以创建数字的Set,而不是连接到字符串中。

您可以使用Set并删除不需要的数字。

function unused (array) {
return Array
.from([...array.join('')].reduce(
(s, v) => (s.delete(v), s),
new Set('0123456789')
))
.join('')
}

console.log(unused([12, 34, 56, 78])); // "09"
console.log(unused([2015, 8, 26]));    // "3479"

一种短路方法

function unused (array) {
const s = new Set('0123456789');
[...array.join('')].every(v => (s.delete(v), s.size));
return Array
.from(s)
.join('')
}

console.log(unused([12, 34, 56, 78])); // "09"
console.log(unused([2015, 8, 26]));    // "3479"

最新更新