如何截取数组中对象的字符串属性并返回修改后的对象数组?
问题:修改数组内对象的description属性并返回目标数组
我想访问数组内对象的description属性,使用slice()等字符串截取方法,返回该属性值已修改的对象数组。我尝试用for循环实现但未得到预期结果。
原始数据代码
let cars = [ { "status": "disabled" }, { "status": "active", "store": true, "models": [ { "description": "4 doors, 0km/h, no breakdowns", "color": "black", "price": 100.000, }, { "description": "2 doors, 30.000km/h, some breakdowns", "color": "black", "price": 20.000, }, { "description": "4 doors, 120.000km/h, no breakdowns", "color": "red", "price": 50.000, } ] } ]
我的尝试代码
let carsTwo= cars[1].models; //删除不需要保留的属性 for(let i=0; i<carsTwo.length; i++) { delete carsTwo[i].color; delete carsTwo[i].price; } //尝试对每个description属性值应用slice(),仅在console.log中有效 for(let i=0; i<carsTwo.length; i++) { carsTwo[i].description.slice(3) }
我的目标是返回仅包含已应用slice截取的description属性的对象数组。注:我是编程初学者。
解答
核心问题分析
你代码里的slice()调用没有生效,是因为**slice()方法不会修改原字符串,而是返回一个截取后的新字符串**,你需要把这个新字符串重新赋值给description属性,修改才会被保存。
方案1:修改原数组对象(直接修改原数据)
如果允许修改原cars数组里的对象,可以调整你的for循环:
let carsTwo = cars[1].models; for(let i = 0; i < carsTwo.length; i++) { // 删除不需要的属性 delete carsTwo[i].color; delete carsTwo[i].price; // 关键:将slice截取后的结果赋值回description属性 carsTwo[i].description = carsTwo[i].description.slice(3); } // 现在carsTwo就是你想要的数组 console.log(carsTwo);
方案2:创建新数组(不修改原数据,更推荐)
如果不想改动原始的cars数组,推荐用map()方法创建一个全新的结果数组,这是处理数组更常用、更安全的方式:
// 遍历models数组,生成只包含处理后description的新对象数组 const modifiedCars = cars[1].models.map(model => { return { description: model.description.slice(3) }; }); console.log(modifiedCars);
map()会遍历数组的每个元素,对每个元素执行你定义的处理逻辑,最后返回一个全新的数组,原数组的所有数据都不会被改动。
关键点总结
slice()是无副作用的方法,只会返回新字符串,必须赋值才能生效- 优先使用
map()处理数组生成新结果,避免意外修改原数据
内容的提问来源于stack exchange,提问作者starr
相关产品推荐
相关产品推荐

