【问题标题】:How to Update Ordered Collection of data against other collection of data - using Map Object如何根据其他数据集合更新有序数据集合 - 使用 Map 对象
【发布时间】:2017-09-28 05:45:16
【问题描述】:

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

匿名对象数组:

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 个嵌套循环。 一个循环将遍历服务器数组,并且对于每次迭代,我将 search 其对应的迭代。像这样:

// 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);
  });

总结实际问题:

  1. clientData定义为Map是一个有效的用例,并享受 像我处理Object 这样的访问者的好处,以及 像我处理 Array 一样迭代?
  2. 在该用例中使用Map 有什么缺点?如果有的话
  3. 我错过了解决此问题的其他方法吗?

【问题讨论】:

    标签: javascript arrays data-structures ecmascript-6


    【解决方案1】:

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

    clientData[key]
    

    所以“带有访问者方法的对象”可以这样循环:

    for(var i in clientData) {
        console.log(i + " = " + clientData[i].employed) 
    }
    

    【讨论】:

    • 是的,但我不能保证使用对象时的打印顺序
    • 要根据身份证号按顺序打印吗?
    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2021-07-25
    • 2020-11-07
    • 2015-08-20
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多