首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我不明白三元运算符是如何工作的,以及我们是如何调用此数组map方法中的函数的

我不明白三元运算符是如何工作的,以及我们是如何调用此数组map方法中的函数的
EN

Stack Overflow用户
提问于 2019-09-20 01:46:08
回答 4查看 41关注 0票数 0

我在javascript函数参数中使用了这个三元运算符,我似乎真的不知道它是如何使用的,以及函数(Fn)是如何被调用的。

我的理解是,fn的类型计算为true,然后我们使用fn函数,但是要做什么呢?

我真的不明白。

我试着通读了所有可用的材料,但似乎不理解我们是如何将val=> valfn

代码语言:javascript
代码运行次数:0
运行
复制
const countBy = (arr, fn) =>
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
console.log(countBy([6, 10, 100, 10], Math.sqrt));
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-09-20 02:00:27

这表示如果fn是使用fn的函数,则使用val => val[fn]

代码语言:javascript
代码运行次数:0
运行
复制
typeof fn === 'function' ? fn : val => val[fn]

我看到的一个用例是使用相同的函数对具有数字的数组或具有一些键名的对象数组执行一些算术运算,

代码语言:javascript
代码运行次数:0
运行
复制
const countBy = (arr, fn) =>
  arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
    acc[val] = (acc[val] || 0) + 1;
    return acc;
  }, {});
console.log(countBy([6, 10, 100, 10], Math.sqrt));
console.log(countBy([{b:6}, {b:10}, {b:100}, {b:10}], 'b'));

票数 -1
EN

Stack Overflow用户

发布于 2019-09-20 01:51:18

数组map()接受一个函数。三元组用于确定要运行的函数。代码指出,如果fn是一个函数,则将其用作函数,如果不是,则使用其他函数,并将其用作键。

代码可以重写为

代码语言:javascript
代码运行次数:0
运行
复制
const countBy = (arr, fn) => {
  let mapped
  if (typeof fn === 'function') {
    mapped = arr.map(fn)
  } else {
    mapped = arr.map(val => val[fn])
  }
  return mapped.reduce((acc, val, i) => {
    acc[val] = (acc[val] || 0) + 1;
    return acc;
  }, {});
}

这里的问题是变量fn非常不清楚它是什么。有人重载了函数,并且没有使用正确的变量名。就我个人而言,我会把它变成一个物体。

代码语言:javascript
代码运行次数:0
运行
复制
const countBy = (arr, options) =>
  arr.map(options.processFunction ? options.processFunction : val => val[options.objectProperty]).reduce((acc, val, i) => {
    acc[val] = (acc[val] || 0) + 1;
    return acc;
  }, {});

console.log(countBy([6, 10, 100, 10], {
  processFunction: Math.sqrt
}));


const receipt = [{
  total: 6
}, {
  total: 10
}, {
  total: 100
}, {
  total: 10
}]

console.log(countBy(receipt, {
  objectProperty: 'total'
}));

票数 1
EN

Stack Overflow用户

发布于 2019-09-20 01:48:01

val -包含函数的对象。您可以使用map将function:myObject['myFunction']应用到每个元素。

myObject['myFunction']等于myObject.myFunction

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58016435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档