【问题标题】:What is the purpose of spread syntax in this example? [duplicate]这个例子中展开语法的目的是什么? [复制]
【发布时间】:2019-04-27 05:14:59
【问题描述】:

在这里,我们使用键和值创建了 Hashmap。然后我们使用 array.map 来获取我们的结果。即如果我们输入“cat”,我们将得到输出为“dog”。我不明白如何使用传播语法。

var rule = 
{
"c": "d",
"a": "o",
"t": "g",
"h": "a",
"e": "n",
"n": "t",
}

function output(str) {
return [...str].map(d => rule[d]).join('')
}

console.log(output('cat')) 

【问题讨论】:

  • 你能不试试吗?只需在控制台中运行[...'cat']

标签: javascript arrays


【解决方案1】:

它接受一个可迭代对象,并使用spread syntax ... 返回可迭代对象的每一项。

在这种情况下,一个字符串被分割成一个字符数组。

['c', 'a', 't']

如果你使用Array.from,也可以得到同样的结果,它有一个内置的映射参数。

var rule =  { c: "d", a: "o", t: "g", h: "a", e: "n", n: "t" }

function output(str) {
    return Array.from(str, d => rule[d]).join('');
}

console.log(output('cat')) ;

【讨论】:

    【解决方案2】:

    分解:

    [...str]

    给:['c', 'a', 't'];

    在这种情况下,展开语法将字符串分解为一个数组。其中每个索引代表字符串中的一个字母。

    .map(d => rule[d])

    将上述数组转换为:

    ['d', 'o', 'g']

    当它遍历每个值并使用 javascript 对象来获取它的值时:(所以 'c' 映射到 'd' 为 rule['c'] = 'd','a' 映射到 'o',等等...)

    .join('')

    将上述数组转换为字符串dog

    因此,做:

    console.log(output('cat'))

    给出:“狗”

    【讨论】:

      【解决方案3】:

      您将无法将map 直接应用于字符串,因为String 没有这样的方法。使用展开语法,您可以获得一个单独的字符数组,然后可以将map 应用于该数组。

      实际上使用Array.from 是更好的做法,因为它不会创建中间数组,并且仍然允许您对每个字符执行一个函数(使用第二个参数):

      Array.from(str, d => rule[d]).join('')
      

      【讨论】:

        【解决方案4】:

        在您的情况下,扩展运算符将字符串“cat”传播到包含 ['c','a','t'] 的字符数组中

        然后它遍历这个数组以提供与值匹配的输出字符串。在那里你得到字符串“dog”作为输出!

        【讨论】:

          【解决方案5】:

          字符串上的扩展语法将其转换为由其字符组成的数组。这是有效的,因为字符串是可迭代的集合。 http://es6-features.org/#SpreadOperator

          【讨论】:

            猜你喜欢
            • 2016-10-15
            • 2019-12-08
            • 1970-01-01
            • 1970-01-01
            • 2019-01-27
            • 2011-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多