JavaScript拆分数组为单元素子数组异常及嵌套数组降维咨询
问题解答
字符拆分问题根因及解决
你遇到的按单个字符拆分的问题,核心原因是press.post_category遍历出来的每个item不是数组类型,是字符串类型。对字符串执行slice方法时,默认会按单个字符切割,才会出现["d","o","g"]这类不符合预期的输出。
你可以先加一行日志验证类型是否符合预期:
arrays.forEach(function(item){ console.log(typeof item, item) // 输出确认item是不是string类型 // 原有逻辑 })
如果确实返回的是字符串格式的数组(比如"['dog', 'cat']"这类序列化字符串),先做格式转换转成数组即可,以下是完整实现代码,未使用splice,完全符合你的技术要求:
var arrays = press.post_category; var finalResult = []; arrays.forEach(function(item){ // 字符串转数组适配步骤 if(typeof item === 'string'){ item = JSON.parse(item.replace(/'/g, '"')) } // 直接把每个元素包装成单元素数组 const splitItem = item.map(ele => [ele]) finalResult.push(...splitItem) console.log(splitItem) })
运行后日志就会输出你要的拆分效果,finalResult也会存储所有拆分后的单元素数组集合。
多余外层嵌套数组移除方案
你现在的三层嵌套数组[[["dog"],["cat"]]],不要用全量拍平,指定拍平深度即可避免回到一维字符串数组:
var animals = [ [ [ "dog" ], [ "cat" ] ] ]; // 方案1:确定只有1层多余外层时直接取第一层元素 animals = animals[0] // 方案2:不确定嵌套层数时指定拍平深度为1,兼容性更强 animals = animals.flat(1)
两种方案最终输出都是你需要的[["dog"],["cat"]]格式。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

