【问题标题】:Javasript array functions with no arguments [duplicate]没有参数的Javascript数组函数[重复]
【发布时间】:2020-04-17 12:24:46
【问题描述】:

这更像是一个愚蠢的问题,但我不得不问。 在没有参数的情况下调用像 map 这样的数组函数是一个好习惯吗? 假设我的代码中已经有一个指定长度的数组“x”,我想创建另一个长度相同但内容不同的数组。 例如:

function generateRandomContent() { ... }
const x = [1, 2, 3, 4, 5]
const y = x.map(() => generateRandomContent())
// or
const z = Array(x.length).fill().map(() => { ... })

当然我可以传递一个参数并且从不使用它,但它有好方法和坏方法吗?

【问题讨论】:

  • 如果映射操作不依赖于初始数组的大小,为什么还要进行映射操作?
  • .map() 不应该在没有参数的情况下使用。您可以改用 .forEach() 或 for 循环。
  • Array.from({length: x.length}, () => someFn()) 甚至Array.from({length: x.length}, someFn) 将生成一个具有不同内容的相同size 的数组。 .map 表示新数组的内容与原数组的内容密切相关。
  • 也许值得考虑Array.from,它将一个函数作为其第二个参数。例如:Array.from(Array(10), generateRandomContent).
  • @Yousername forEach 在那里更没有意义。

标签: javascript arrays dictionary


【解决方案1】:

你不应该在这里使用.mapmapping 操作是当您获取一些输入并生成新输出时。因此,对于单个元素,您有一个类似于 x -> y 的关系,然后将其应用于整个数组以使用相同的映射规则生成一个新数组:

const input = [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100];

//mapping relationship
const toCharacter = x => String.fromCharCode(x);

const result = input.map(toCharacter);

console.log(result.join(''))

如果你只是想根据原始的长度创建一个新的数组,但内容完全不相关,那么你最好使用Array.from,它可以创建一个给定的数组size 并接受第二个参数来填充它:

function generateRandomContent() {
  return Math.floor(Math.random() * 100);
}
const x = [1, 2, 3, 4, 5]

const y = Array.from({length: x.length}, () => generateRandomContent());
//or just pass the function reference
const z = Array.from({length: x.length}, generateRandomContent);


console.log(y);
console.log(z);

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 2021-06-15
    • 2011-08-17
    • 2017-01-15
    • 2020-12-04
    • 2021-01-27
    • 2016-03-27
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多