【问题标题】:check if two object list have the same property检查两个对象列表是否具有相同的属性
【发布时间】:2018-03-09 18:51:51
【问题描述】:

我有两个对象列表,它们中有不同的字段。我想检查两个字段在 javascript 中是否具有相同的值。 我的例子是列表一

0:Client_Issue_Reference__c:null
  End__c:"2018-03-06T23:00:00.000Z"
  Id:"a0Q2F000000oRyBUAU"
  Resource_Full_Name__c:"test user"
  Start__c:"2018-03-06T15:00:00.000Z"

我的第二个列表是

0:Id:"0050W000006r0xnQAA"
  IsActive:true
  Name:"test user"

我想看看 Resource_Full_Name__c != Name 目前我有

for (var i = 0; i < listOne.length; i++) {
  for (var j = 0; j < listTwo.length; j++) {
     if (listOne[i].Name != listTwo[j].Resource_Full_Name__c) {
          buildingObjectAllUser = {}
          sobjectType: "testObject";
          buildingObjectAllUser.Id = listOne[i].Id;
          buildingObjectAllUser.Start__c = "2018-03-06T23:00:00.000Z";
          buildingObjectAllUser.End__c = "2018-03-06T23:00:00.000Z";
          buildingObjectAllUser.Name = "No Hours";
          buildingObjectAllUser.Resource_Full_Name__c = listOne[i].Name;
          listThree.push(buildingObjectAllUser);
        }
      }
    }

这个问题要花很多时间,真的很慢

【问题讨论】:

  • sobjectType: "testObject"; ????
  • 如果listThree的顺序不重要,你可以创建子数组并使用Promises并行执行搜索过程。
  • 将列表 2 变成一个对象,以关闭 Name。这样那些查找将是O(1)
  • @MattBurland 这个解决方案很好,但是当你把所有东西放在一起时,它变成了O(n)
  • @Ele:是的,我知道。这就是为什么我说查找O(1)

标签: javascript jquery loops salesforce-lightning


【解决方案1】:

这应该更快

let list1 = [{Client_Issue_Reference__c:null,
  End__c:"2018-03-06T23:00:00.000Z",
  Id:"a0Q2F000000oRyBUAU",
  Resource_Full_Name__c:"test user",
  Start__c:"2018-03-06T15:00:00.000Z"}]

let list2 = [{Id:"0050W000006r0xnQAA",
  IsActive:true,
  Name:"test user"}]


list1.map(obj => {
  let checker = list2.find(obj2 => obj2.Name === obj.Resource_Full_Name__c)
  if (!checker) {
    let buildingObjectAllUser = {}
    sobjectType: "testObject"
    buildingObjectAllUser.Id = listOne[i].Id
    buildingObjectAllUser.Start__c = "2018-03-06T23:00:00.000Z"
    buildingObjectAllUser.End__c = "2018-03-06T23:00:00.000Z"
    buildingObjectAllUser.Name = "No Hours"
    buildingObjectAllUser.Resource_Full_Name__c = listOne[i].Name
    listThree.push(buildingObjectAllUser)
    return buildingObjectAllUser
  }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2021-08-19
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多