如何按指定字符串分割嵌套数组,保留其之前的元素?
需求说明
我有一个包含数百个对象的数组,每个对象的arr.categories是嵌套数组,其中随机位置存在specific string子数组。需要删除该specific string子数组及其之后的所有元素,仅保留其之前的部分。
输入数组示例
const array = [{ "post": 1, "arr": { "categories": [ [ "string 1" ], [ "string 2" ], [ "string 3" ], [ "specific string" ], [ "string 4" ], [ "string 5" ], [ "string 6" ], [ "string 7" ] ] } }, { "post": 3, "arr": { "categories": [ [ "string 1" ], [ "string 2" ], [ "specific string" ], [ "string 3" ], [ "string 4" ], [ "string 5" ], [ "string 6" ], [ "string 7" ] ] } }, { "post": 2, "arr": { "categories": [ [ "string 1" ], [ "string 2" ], [ "string 3" ], [ "string 4" ], [ "string 5" ], [ "specific string" ], [ "string 6" ], [ "string 7" ], [ "string 8" ] ] } } ];
期望输出数组
[{ "post": 1, "arr": { "categories": [ [ "string 1" ], [ "string 2" ], [ "string 3" ] ] } }, { "post": 3, "arr": { "categories": [ [ "string 1" ], [ "string 2" ] ] } }, { "post": 2, "arr": { "categories": [ [ "string 1" ], [ "string 2" ], [ "string 3" ], [ "string 4" ], [ "string 5" ] ] } } ]
我的尝试
我知道slice无法直接按字符串操作,以下是我预想的代码思路,但显然无法实现需求:
for(var i=0, len = array.length; i < len; i++){ array[0].arr['categories'].slice(0,'specific string'); }
解决方案
可以通过遍历数组中的每个对象,定位到目标子数组的索引后进行截取:
array.forEach(item => { // 找到包含"specific string"的子数组的索引 const targetIdx = item.arr.categories.findIndex(subArr => subArr[0] === 'specific string'); // 若找到目标索引,截取该索引之前的元素替换原数组 if (targetIdx !== -1) { item.arr.categories = item.arr.categories.slice(0, targetIdx); } });
代码说明
findIndex遍历categories数组,返回第一个符合条件的子数组索引(这里判断子数组首个元素是否为目标字符串)slice(0, targetIdx)截取从数组开头到目标索引前的所有元素,确保不包含目标子数组及后续元素- 加入
targetIdx !== -1的判断,避免数组中不存在目标字符串时执行无效操作
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

