我需要保存有关人员的有序数据,我应该根据从服务器获取的数据来更新这些数据。现在,在客户端,数据的结构方式:
匿名对象数组:
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
},
]这样,更新我的集合就迫使我使用两个嵌套循环。一个循环将在服务器数组上迭代,对于每个迭代,我将通过迭代搜索其对应的循环。就像这样:
// 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的缺点是什么?如果有发布于 2017-09-28 10:32:26
可以通过如下方式访问Javascript对象中的值:
clientData[key]因此,可以像这样通过这样的方式来循环“具有无符号的对象”:
for(var i in clientData) {
console.log(i + " = " + clientData[i].employed)
}https://stackoverflow.com/questions/46461768
复制相似问题