前几天,我在推特上发布了一个这样的测验
↓这里。
在本文中,我将公布测验的正确答案。
测验内容
测验内容如下。
[JS测验]
请填写/* ここに回答を書いてください */部分!
const array1 = [1, 2, 3, 4, 5, 6]
const array2 = array1./* ここに解答を書いてください */
console.log(array2)
// -> [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6]
简而言之,
来自数组
[1, 2, 3, 4, 5, 6]
生成数组[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6]
我应该怎么办?那就是问题所在。
再总结一点:
检查数组
array1的每个元素,
奇数如果三应增加到
偶数如果二应增加到
并将其存储在一个名为array2的变量中!↑ 这就是问题所在。
正确答案公告
然后我们将公布正确答案。
有很多方法可以写这个,但这是我想出的。
const array2 = array1.flatMap(n => n % 2 ? [n, n, n] : [n, n])如果您从未见过
flatMap()方法,您可能想知道,“这是什么?”
我将逐步解释。评论
首先,我想做的是
检查数组
array1的每个元素,
奇数如果三应增加到
偶数如果二应增加到
并将其存储在一个名为array2的变量中!↑ 是这样的。
需要根据数组
array1创建数组array2。这意味着您可以使用
map()方法。使用
map()方法,
目前,数组的所有元素都是增加到两个我们看看吧。const array2 = array1.map(n => [n, n])↑数组中的每个元素,全部数组 2我觉得我会给你。
输出将如下所示:
console.log(array2) // => [[1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6]]↑ 当然,双数组它成为了
所以,最后我会flat()。const array2 = array1.map(n => [n, n]).flat() // <- .flat() 追加!↑ 原来如此。
输出将如下所示:console.log(array2) // => [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]↑ 我能够将双精度数组转换为平面数组。
结果,所有元素增加到 2我以前可以。让我们使用
flatMap()方法正如刚才提到的
我想做@987654341 然后@987654342
在这种情况下,您可以使用
flatMap()方法。const array2 = array1.flatMap(n => [n, n]) console.log(array2) // => [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]↑ 原来如此。
那么
flatMap()方法是什么n => [n, n]↑ 通过传递这样的函数,
增加数组元素可以说是一种可以作为旁注
对于
flatMap()方法,n => []↑ 如果你传递这样一个函数,减少元素您也可以(删除)它。
继续测验评论
const array2 = array1.flatMap(n => [n, n]) console.log(array2) // => [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]现在,数组的所有元素增加到 2我以前可以。
之后,
奇数如果三应增加到
偶数如果二应增加到↑ 这个条件分支有必要的。
要确定一个数字是奇数还是偶数,请使用以下公式:
n % 2余数运算符感觉就像在使用 (
%)。"
n除以2余”是要求。
n除以2余但
- 如果
1那么n是奇数- 如果
0那么n是偶数这就是它的感觉。
*
n % 2的结果将是1或0。它不会是2或5。 (自然吗?)在代码中,
if (n % 2 === 1) { // 奇数の場合の処理 } else { // 偶数の場合の処理 }↑ 你可以这样写。
根据条件,你应该增加数组的元素
之前,对于
flatMap()方法,n => [n, n]↑通过这个函数,数组的每个元素都可以增加两个我以前可以。
我想在这里添加一个条件“无论是否奇怪”......
n => { if (n % 2 === 1) { // 奇数だったら3つ! return [n, n, n] } else { // 偶数だったら2つ! return [n, n] } }我正在尝试编写这样的函数:
如果将此函数传递给flatMap()方法,奇数如果三应增加到
偶数如果二应增加到↑ 似乎满足了这个条件。
如果您使用三元运算符并将其写在一行中...
n => n % 2 === 1 ? [n, n, n] : [n, n]↑ 原来如此。
条件
n % 2 === 1是
这种情况下写n % 2就可以了,n => n % 2 ? [n, n, n] : [n, n]↑ 这没问题。
现在让我们将此函数传递给
flatMap()方法。const array1 = [1, 2, 3, 4, 5, 6] const array2 = array1.flatMap(n => n % 2 ? [n, n, n] : [n, n]) console.log(array2) // -> [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6]我能够成功打印出我想要的东西。
以下是模型答案的解释。
另一种解决方案
有人给了我这个答案。
主要流程是
const array2 = array1.flatMap((x) => Array(x % 2 + 2).fill(x))↑ 原来如此。
到
flatMap()方法(x) => Array(x % 2 + 2).fill(x)↑ 我正在传递一个这样的函数。
x % 2 + 2的表达很聪明,让我觉得,“他很聪明!”
x % 2是
x是奇数变成1x是偶数然后变成0↑ 使用这条规则,
通过添加2
x % 2 + 2是
x是奇数然后变成3x是偶数然后2↑ 这就是我正在做的……!
换句话说,
Array(x % 2 + 2)部分是
它作为Array(3)或Array(2)工作。这就是你如何创建一个指定长度的数组,
fill()我会用方法填充它。我这辈子什么都想不出来……
我的意思是,您不必将
Array()添加到new...!
我也不知道这个。从一次测验中学到很多东西的感觉真好!
很多有趣的答案
我们得到了很多有趣的答案。
有趣的答案 1
主要加工
const array2 = array1.concat(1, 1, 2, 3, 3, 4, 5, 5, 6).sort()不,将缺少的内容添加到
array1和sort()Sunnokai!感觉有点霸道,不过按照规矩是正确的……!
有趣的答案第 2 部分
主要加工
const array2 = array1.slice(6).concat([1,1,1,2,2,3,3,3,4,4,5,5,5,6,6]);不,
array1的元素位置!是不是该换整件了!
或者更确切地说,写下您要输出的数组!
但规则是正确的!
有趣的答案3
主要加工
const array2 = array1.concat(array1, array1).reduce((a,b,c,d)=> (d.push(...d.splice(Number(a%16n),1)),a >> 4n||d),4721443915042874085729n).slice(0, 15);不,它非常难以阅读!
但是当我尝试它时,它起作用了!
不愧是@uhyo大老师……!有趣的答案第 4 部分
不,由用户将其添加到数组中!
你按了多少次按钮?
我的意思是,不要用操作“覆盖”算法!
但是正确的答案就是正确的答案吗……?
有趣的答案 5
主要加工
const array2 = array1.length;const 待避 = console.log;console.log=function(){待避("[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6]")}不,你一行写了多少字?
并覆盖
console.log()方法!但规则并没有说“没有分号”。 . .
会不会是对的……?有趣的答案6
主要加工
const array2 = array1.unko || [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6]不,我求你了,请使用
array1的内容!(Wai自己的回答)
概括
最后就像是小切比赛,
数百人响应,这是一个巨大的成功。我本人,提问者,
“咦,还有别的写法吗!?”
我学到了很多。
感谢所有参与的人!
喜欢请挑战
也许还有其他答案。
由于我们已经为 TypeScript 准备了一个 Playground,
如果你喜欢,请尝试一下。如果你想出一个有趣的答案,请告诉我......哈哈
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308624045.html