对数组内对象的字符串排序后原对象未变更是什么原因?
原因分析
- 你对字符串做的
split、join操作都是返回新值的方法,不会修改原字符串本身,而sort虽然是数组的原地排序方法,但你操作的是原字符串拆分后生成的全新数组,和原对象里存的A1字符串没有关联。 - 整个排序转换流程的最终结果没有赋值回原对象的
A1属性,所以原对象自然不会发生变更。
修正方案
你只需要把处理完成的字符串重新赋值给arr[i].A1即可,修改后的代码如下:
function merge(arr, needed_length){ for(var i = 0; i < arr.length; i++){ // 把排序后的结果赋值回原对象的A1属性 arr[i]['A1'] = arr[i]['A1'].split(', ').sort(function(a, b){ return b - a; }).join(', '); console.log(arr[i]['A1']); console.log(arr[i]); } } merge([{A1:'8, 7, 9'}, {A1:'4, 8, 6'}, {A1:'2, 4, 3'}], 5);
运行后就会看到对象的A1属性已经更新为排序后的字符串了。
内容的提问来源于stack exchange,提问作者Peifeng
相关产品推荐
相关产品推荐

