首页 > 解决方案 > 数组声明

问题描述

我写了一个函数,用第二个函数检查一些数字并返回一个数组。

在检查代码是否有效后,我注意到我必须在第一个函数中声明一个新数组 (arr) 才能解决它。

function calc(a, b) {
  arr = []
  for(a;a<=b;a++) isPow(a) ? arr.push(a) : a
  return arr
}

我想尝试在唯一需要数组的地方创建一个数组,也就是 push(a) 所在的位置。我想过这样的事情:

function calc(a, b) {
  return for(a;a<=b;a++) isPow(a) ? [].push(a) : a
}

但显然这行不通。JavaScript 中有什么方法可以做类似的事情吗?

标签: javascriptarrays

解决方案


使用高阶函数,是的。

function calc(a, b) {
  return [...Array(b - a + 1).keys()].map(x => a + x).filter(x => isPow(x));
}

解释:

  • Array(b - a + 1)将创建一个数组,其长度是 和 之间的元素数量,包括ab

  • .keys()将产生该数组的索引,即 和 之间的数字0b - a包括在内。

  • [...iterator]将创建一个由迭代器的所有元素组成的数组(即 和 之间的数字0b - a包括)。

  • .map(x => x + a)将固定范围,产生 和 之间的数字ab包括在内。

  • .filter(x => isPow(x))将生成一个新数组,其中仅包含满足isPow.


推荐阅读