如何修改嵌套数组对象的name值?使用path.parse提取文件名
修改嵌套数组对象的name属性值
看起来你已经找对了方向——用path.parse()来提取文件名,但你的代码只计算了新的name值并打印,没有把它赋值回原对象,所以数组没被更新。咱们来修正一下:
首先,确保你已经引入了Node.js的path模块:
const path = require('path');
然后调整你的遍历代码,把计算好的新name值赋值给对应的对象:
const array = [ { "name": "core Test", "item": [ { "name": "test/core/core.js", "item": [] } ] }, { "name": "users Test", "item": [ { "name": "test/users/user.js", "item": [] } ] } ]; array.forEach((element) => { // 遍历外层元素的item子数组 element.item.forEach((i) => { // 解析name路径,提取不带扩展名的文件名并赋值回去 i.name = path.parse(i.name).name; }); }); console.log(array); // 这里就能看到你期望的输出了
为什么这样可行?
因为数组里的对象是引用类型,在forEach里修改对象的属性,会直接作用于原数组中的对象,不需要额外返回新数组(当然如果你想创建新数组不修改原数组,可以用map,不过你的需求是更新原数组,所以forEach足够)。
期望输出验证
运行上面的代码后,输出会和你想要的完全一致:
[ { "name": "core Test", "item": [ { "name": "core", "item": [] } ] }, { "name": "users Test", "item": [ { "name": "user", "item": [] } ] } ]
如果你的数组可能有更深的嵌套(比如item里还有多层item),可以改成递归函数处理,但根据你给出的示例,上面的代码已经足够解决问题啦。
内容的提问来源于stack exchange,提问作者brxnzaz
相关产品推荐
相关产品推荐

