我希望基于全局声明的两个数组 - "ideaList"和"endorsements"创建一个数组。由于在程序其他部分中使用了ideaList和endorsements,我需要它们保持不可变性。我认为使用.map和.filter可以实现这种不可变性。
function prepareIdeaArray(){
var preFilteredIdeas=ideaList
.filter(hasIdeaPassedControl)
.map(obj => {obj.count = endorsements
.filter(x=>x.ideaNumber===obj.ideaNumber)
.reduce((sum, x)=>sum+x.count,0);
obj.like = endorsements
.filter(x=>x.ideaNumber===obj.ideaNumber && x.who===activeUser)
.reduce((sum, x)=>sum+x.count,0)===0?false:true
obj.position = generatePosition(obj.status)
obj.description = obj.description.replace(/\n/g, '<br>')
return obj;});
preFilteredIdeas.sort(compareOn.bind(null,'count',false)).sort(compareOn.bind(null,'position',true))
return preFilteredIdeas;
}
然而,在执行此函数后,当我使用console.log ideaList时,我发现数组中的所有对象都具有“count”、“like”、“position”属性及其对应的值,这证明该数组已经被改变了。
我尝试只使用.map,但结果相同。
您知道如何防止ideaList被改变吗?另外,我想避免使用const,因为我首先全局声明了ideaList,然后在另一个函数中将一些数据分配给它。
let clone = [...ideaList]
顺便说一下,.map()
不会改变原数组,它返回一个副本。 - zer00ne