首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据其他数据收集更新有序数据收集--使用Map对象

如何根据其他数据收集更新有序数据收集--使用Map对象
EN

Stack Overflow用户
提问于 2017-09-28 05:45:16
回答 1查看 28关注 0票数 0

我需要保存有关人员的有序数据,我应该根据从服务器获取的数据来更新这些数据。现在,在客户端,数据的结构方式:

匿名对象数组:

代码语言:javascript
复制
const clientData = [{
        id: 1,
        employed: true
    },
    {
        id: 2,
        employed: false
    },
    {
        id: 3,
        employed: true
    },
    {
        id: 4,
        employed: false
    }
]    

来自服务器的数据如下所示:

代码语言:javascript
复制
   const serverData = [
{
    id: 2,
    newEmployedStatus: true
},
{
    id: 3,
    newEmployedStatus: false
},
]

这样,更新我的集合就迫使我使用两个嵌套循环。一个循环将在服务器数组上迭代,对于每个迭代,我将通过迭代搜索其对应的循环。就像这样:

代码语言:javascript
复制
// Very Verbose
serverData.forEach((serverPerson)=> {
    clientPerson = clientData.find((element)=> {
        return element.id === serverPerson.id
    })
    clientPerson.employed = serverPerson.newEmployedStatus
})

我想避免那些嵌套的循环和复杂的逻辑,所以:

带有访问器的对象接近

代码语言:javascript
复制
const clientData = {
    1: {
        employed:true
    },
    2: {
        employed:false
    },
    3: {
        employed:true
    },
    4: {
        employed:false
    }
}

但是当我想打印它们的时候,我就不能依赖元素的顺序了。

所以,我最近知道的另一种方法是:

地图对象

代码语言:javascript
复制
const clientDataMap = new Map(
    [
        [1, { employed:true }],
        [2, { employed:false }],
        [3, { employed:true }],
        [4, { employed:false }],

    ]
)

更新clientData将降低复杂性:

代码语言:javascript
复制
    serverData.forEach((serverPerson)=> {
        clientDataMap.get(serverPerson.id).employed = serverPerson.newEmployedStatus
    })

仍然能够以有序的方式打印这些人:

代码语言:javascript
复制
clientDataMap.forEach((value, key)=> {
    console.log(key + ' = ' + value.employed);
  });

总结一下实际问题:

  1. clientData定义为Map并享受访问器(如处理Object )和迭代(如处理Array )的好处是否是一个有效的用例?
  2. 在这种使用中使用Map的缺点是什么?如果有
  3. 对于这个问题,我还有其他的解决办法吗?
EN

回答 1

Stack Overflow用户

发布于 2017-09-28 10:32:26

可以通过如下方式访问Javascript对象中的值:

代码语言:javascript
复制
clientData[key]

因此,可以像这样通过这样的方式来循环“具有无符号的对象”:

代码语言:javascript
复制
for(var i in clientData) {
    console.log(i + " = " + clientData[i].employed) 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46461768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档