如何遍历对象数组提取元素并合并为单一数组?
解决嵌套数组问题:合并拆分后的字段为单一数组
你当前的代码之所以会得到嵌套数组,是因为每次调用push()的时候,把split(',')返回的整个数组作为单个元素塞进去了,自然就变成了数组套数组的结构。这里给你几种简单的修改方案,都能得到你想要的单一数组:
方案1:用concat替换push(兼容旧版JS)
concat方法会自动把传入的数组元素逐个合并到目标数组里,不会产生嵌套:
c.data.required_fields = []; for(var i=0; i<c.data.list.length; i++) { c.data.required_fields = c.data.required_fields.concat( c.data.list[i].required_fields.display_value.split(',') ); }
方案2:用展开运算符...展开数组(ES6+)
如果你的环境支持ES6语法,用展开运算符可以更直观地把拆分后的数组元素逐个push进去:
c.data.required_fields = []; for(var i=0; i<c.data.list.length; i++) { const splitItems = c.data.list[i].required_fields.display_value.split(','); c.data.required_fields.push(...splitItems); }
方案3:用reduce简化代码(现代JS风格推荐)
用reduce可以把整个遍历合并的逻辑写成更简洁的形式,可读性更强:
c.data.required_fields = c.data.list.reduce((total, currentItem) => { return total.concat(currentItem.required_fields.display_value.split(',')); }, []);
额外提示
如果你的display_value可能存在空字符串(比如字段末尾带逗号、或者本身为空值),可以加个过滤逻辑去掉无效项:
// 以reduce方案为例,添加filter过滤空字段 c.data.required_fields = c.data.list.reduce((total, currentItem) => { const validFields = currentItem.required_fields.display_value.split(',').filter(field => field.trim() !== ''); return total.concat(validFields); }, []);
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

