我需要保存有关人员的有序数据,我应该根据从服务器获取的数据进行更新。现在,在客户端构建数据的方式:
匿名对象数组:
const clientData = [{
id: 1,
employed: true
},
{
id: 2,
employed: false
},
{
id: 3,
employed: true
},
{
id: 4,
employed: false
}
]
来自服务器的数据看起来像这样:
const serverData = [
{
id: 2,
newEmployedStatus: true
},
{
id: 3,
newEmployedStatus: false
},
]
这样,更新我的集合迫使我使用2个嵌套循环。 一个循环将迭代服务器数组,并且对于每次迭代,我将通过迭代搜索其对应的。像这样:
// Very Verbose
serverData.forEach((serverPerson)=> {
clientPerson = clientData.find((element)=> {
return element.id === serverPerson.id
})
clientPerson.employed = serverPerson.newEmployedStatus
})
我想避免那些嵌套循环和复杂的逻辑,所以:
具有访问者方法的对象
const clientData = {
1: {
employed:true
},
2: {
employed:false
},
3: {
employed:true
},
4: {
employed:false
}
}
但是当我想要打印它们时,我将无法依赖元素的顺序。
所以,我最近才知道另一种方法:
地图对象
const clientDataMap = new Map(
[
[1, { employed:true }],
[2, { employed:false }],
[3, { employed:true }],
[4, { employed:false }],
]
)
更新clientData
将降低复杂性:
serverData.forEach((serverPerson)=> {
clientDataMap.get(serverPerson.id).employed = serverPerson.newEmployedStatus
})
仍然能够以有序的方式打印这些人:
clientDataMap.forEach((value, key)=> {
console.log(key + ' = ' + value.employed);
});
总结实际问题:
clientData
定义为Map
并享受是一个有效的用例
访问者的好处就像我正在处理Object
和
迭代就像我在处理Array
?Map
有什么缺点?如果有的话答案 0 :(得分:0)
您始终可以通过以下方式访问Javascript对象中的值:
clientData[key]
所以"带有acessors的物体接近"可以像这样循环:
for(var i in clientData) {
console.log(i + " = " + clientData[i].employed)
}