TypeError: flatMap 不是 JavaScript 中的函数
TypeError: flatMap is not a function in JavaScript
“TypeError: flatMap is not a function”错误的发生有两个主要原因:
flatMap
在不支持该方法的浏览器中使用该方法。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);
flatMap
Internet Explorer 不支持该方法。如果你必须支持浏览器,你可以使用 和 的组合。 reduce
concat
索引.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 数组。