再次打印出newjson的时候,里面已经被污染了
在编程中,map
函数并不一定会改变原数组。这是因为在大多数编程语言中,例如Python和JavaScript,map
函数是一个对数组元素进行某种操作并返回结果的函数,它不会改变原数组。
然而,根据你的描述,看起来你的代码中的map
函数改变了原数组。这可能有几种原因:
为了给出更具体的答案,我需要更多关于你的代码和使用的编程语言的信息。
"不改变原数组"是指的数组本身,不是说数组里的每个元素。
let arr1 = [{ id: 1 }, { id: 2 }];
let arr2 = arr1.map(e => ({ id: e.id + 1 }));
console.log(arr1); // [{ id: 1 }, { id: 2 }]
console.log(arr2); // [{ id: 2 }, { id: 3 }]
你这里每个元素都是引用类型的,这么写当然会变了,这跟 map 毫无关系。
不改变原数组指的是不改变数组内部元素的个数和顺序,而不是元素本身的属性。
可以和其他数组方法对比理解:
map
:不改变元素个数和顺序;filter
:不改变元素顺序,可能改变元素个数;sort
:不改变元素个数,可能改变元素顺序;let maps = newjson.map((item: any) => ({ ...item, name: 'dd' }));
8 回答4.9k 阅读✓ 已解决
6 回答3.7k 阅读✓ 已解决
5 回答3k 阅读✓ 已解决
5 回答6.5k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
6 回答1.9k 阅读✓ 已解决
map不会改变原数组指的是
你都写了句
item.name = 'dd'
,这还不改变?给你举个简单明了的例子吧.
你把旧钱包(arr)每一张钞票(item)都换到新钱包(new_arr).
之后你再给新钱包(new_arr)塞一张钞票进去.
旧钱包不会有改变.
你贴的代码的意思是
你把旧钱包(arr)每一张钱(item)都换个新钱包(new_arr)的时候,
在每张钞票上画了一朵叫做name的小花