类型错误:flatMap 不是 JavaScript 中的函数

TypeError: flatMap 不是 JavaScript 中的函数

TypeError: flatMap is not a function in JavaScript

“TypeError: flatMap is not a function”错误的发生有两个主要原因:

  • flatMap在不支持该方法的浏览器中使用该方法。
  • flatMap在不是数组的值上使用该方法。

typeerror flatmap 不是一个函数

下面是错误如何发生的示例。

索引.js
const arr = {}; // ⛔️ TypeError: arr.flatMap is not a function const result = arr.flatMap(str => str.split(' '));

我们

在一个对象上调用了
Array.flatMap()方法并返回了错误。

要解决“TypeError: flatMap is not a function”错误,请确保仅flatMap在数组和支持它的浏览器中调用该方法。

flatMap方法返回一个新数组,其中每个元素都是回调函数展平到深度 1 的结果。

索引.js
const arr = ['one two', 'three four']; const result = arr.flatMap(str => str.split(' ')); // 👇️ ['one', 'two', 'three', 'four'] console.log(result);
flatMapInternet Explorer 不支持该方法。如果你必须支持浏览器,你可以使用 和 的组合 reduceconcat
索引.js
// ✅ Supported in Internet Explorer const arr = ['one two', 'three four']; const result = arr.reduce((acc, curr) => acc.concat(curr.split(' ')), []); // 👇️ ['one', 'two', 'three', 'four'] console.log(result);
但是,请注意,当涉及到大型数组(数千个值)时,调用这两个函数比flatMap 直接使用要慢一些。

在调用之前检查值是否为数组flatMap()

您可以使用Array.isArray
方法
有条件地检查值是否为数组

索引.js
const arr = null; const result = Array.isArray(arr) ? arr.flatMap(str => str.split(' ')) : []; console.log(result); // 👉️ []

if/else我们使用了三元运算符,它与语句非常相似。

如果值是一个数组,我们返回调用该flatMap方法的结果,否则,我们返回一个空数组。这样,即使值不是数组也不会出错。

您也可以使用简单的if语句来获得相同的结果。

索引.js
const arr = null; let result = []; if (Array.isArray(arr)) { result = arr.flatMap(str => str.split(' ')); } console.log(result); // 👉️ []

如果值是一个数组,我们调用flatMap()它的方法并将
result变量设置为输出。

在使用之前将值转换为数组flatMap()

如果您有类似数组的对象,请Array.from()在调用 之前使用 方法将其转换为数组flatMap

索引.js
const set = new Set(['one two', 'three four']); const result = Array.from(set).flatMap(str => str.split(' ')); console.log(result); // 👉️ ['one', 'two', 'three', 'four']

flatMap在调用方法之前,我们将值转换为数组。

您也可以使用扩展语法 (…) 来获得相同的结果。

索引.js
const set = new Set(['one two', 'three four']); const result = [...set].flatMap(str => str.split(' ')); console.log(result); // 👉️ ['one', 'two', 'three', 'four']

如果错误仍然存​​在,console.log请检查您调用该flatMap
方法的值并确保它是一个有效的数组。

如果您有一个具有数组属性的对象,请在调用之前访问相关属性flatMap()

索引.js
const obj = { example: ['one two', 'three four'], }; const result = obj.example.flatMap(str => str.split(' ')); console.log(result); // 👉️ [ 'one', 'two', 'three', 'four' ]

Array.flatMap()在调用方法之前,我们访问了指向数组的对象的属性

如果该值是从远程服务器获取的,请通过将其记录到控制台来确保它是您期望的类型。

在调用 flatMap 方法之前,请确保您已将值解析为原生 JavaScript 数组。