前几天,我在推特上发布了一个这样的测验

↓这里。

在本文中,我将公布测验的正确答案。

测验内容

测验内容如下。

[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 的结果将是 10。它不会是25。 (自然吗?)

在代码中,

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奇数变成1
    • x偶数然后变成0

↑ 使用这条规则,
通过添加2

  • x % 2 + 2
    • x奇数然后变成3
    • x偶数然后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()

不,将缺少的内容添加到array1sort() 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

相关文章:

  • 2022-12-23
  • 2021-12-05
  • 2021-12-27
  • 2021-12-29
  • 2021-11-21
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-11
  • 2022-01-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-09
  • 2022-12-23
相关资源
相似解决方案