为了账号安全,请及时绑定邮箱和手机立即绑定

在这段代码中执行三元运算符的真值在哪里?

在这段代码中执行三元运算符的真值在哪里?

慕姐4208626 2021-12-23 10:22:13
这个编码问题的一些背景。我们的 termTopics 函数需要计算这些主题在调查中被提及的次数,然后按以下顺序返回一个包含提及次数的数组:智慧城市、艺术资助和交通。const termTopics = (interviews) => {  const count = interviews.reduce((acc, cv) => {    return {...acc, [cv]: acc[cv] ? acc[cv]+1 : 1}  }, {})  return [count['smart city'], count['arts funding'], count['transportation']];}我无法理解的是扩展运算符,以及它如何为三元运算符创建一个真实的语句来操作。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

const count = interviews

  .reduce((resultObject, interview) => {

    // We are creating an object through the reduce function by iterating through the interviews array.

    // At each iteration we will modify the result object according to the current array interview item value

    return {

      // First we copy the object we have so far

      ...resultObject,

      // Then we set the property corresponding to the current item 

      [interview]: resultObject[interview] 

        // If it is not the first time we have seen this item, the object property already exists and we update it by adding one to its value

        ? resultObject[interview] + 1 

         // Otherwise we create a new property and set it to one

        : 1

    }

  }, {})


查看完整回答
反对 回复 2021-12-23
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

展开语法和条件运算符在这里完全无关。让我们在这里来回展开:

  1. 整个条件运算符表达式为acc[cv] ? acc[cv]+1 : 1,因此它将仅根据acc[cv]+11基于是否acc[cv]为真来解析。

  2. 条件运算符的结果分配给对象中的属性。

  3. 属性名称是[cv]-将等于 的当前值的计算属性名称cv

  4. 属性名称和值被添加到对象中。

  5. 其余的对象值是...acc扩展到对象中的对象的当前值。

实际上,{...acc, [cv]: acc[cv] ? acc[cv]+1 : 1}是以下 ES5 代码的较短版本:

var result = {};


//{...acc}

for (var key in acc) {

  result[key] = acc[key];

}


//[cv]: acc[cv] ? acc[cv]+1 : 1

if (acc[cv]) {

  result[cv] = acc[cv]+1;

} else {

  result[cv] = 1;

}


查看完整回答
反对 回复 2021-12-23
?
holdtom

TA贡献1805条经验 获得超10个赞

真(或假)值来自这里:acc[cv]如果有值,则将其加一,否则将其设置为一。

acc[cv]是一个计算属性,并将查找 的值cv作为 的属性acc,例如acc['smart city']


查看完整回答
反对 回复 2021-12-23
  • 3 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信