如何移除数组对象值中的特定文本/字符串?
解决方案
你可以通过字符串分割的方式提取需要保留的文本部分,同时结合递归遍历(或修改你的扁平化函数)来处理嵌套结构中的所有title字段,完全不需要正则或你提到的那些方法。
方案1:扁平化同时处理标题
修改你已有的扁平化函数,在将元素加入结果数组前,对title进行处理:
function flatten(arr) { const flattened = []; for (const { children, ...element } of arr) { // 分割掉从' **'开始的所有内容,保留前面的有效文本 const processedElement = { ...element, title: element.title.split(' **')[0] }; flattened.push(processedElement); if (children) { flattened.push(...flatten(children.page.results)); } } return flattened; } const flat = [{ page: { results: flatten(DataArray[0].page.results) } }]; console.log(flat[0].page.results);
执行后,扁平化后的每个元素的title都会只保留**之前的内容,比如:
- 原
'TextIWantA **(Text) I Dont Want**'会变成'TextIWantA' - 原
'ChildA TextIWant **(Text I) Dont Want**'会变成'ChildA TextIWant'
方案2:直接修改原嵌套结构(不扁平化)
如果你不需要扁平化,只想保留原结构并清理title,可以写一个递归函数遍历所有节点:
function cleanAllTitles(arr) { arr.forEach(item => { // 提取**之前的文本 item.title = item.title.split(' **')[0]; // 递归处理子节点(如果存在) if (item.children?.page?.results) { cleanAllTitles(item.children.page.results); } }); } // 调用函数处理原数组 cleanAllTitles(DataArray[0].page.results); console.log(DataArray);
原理说明
这里利用split(' **')将字符串从第一个' **'位置分割成两部分,取数组的第一个元素就是你需要保留的文本。这种方式完全符合你的要求:
- 不需要正则表达式
- 不需要使用
.startsWith、.indexOf等方法 - 能自动适配不同的待移除文本内容(只要待移除部分以
' **'开头)
内容的提问来源于stack exchange,提问作者Met
相关产品推荐
相关产品推荐

