【问题标题】:Comparing two objects angular比较两个对象的角度
【发布时间】:2019-11-21 19:23:35
【问题描述】:

我有一个这样的对象

workingHours = [{
  endTime: 11:30,
  fixed: true,
  period: 'AM',
  startTime: 10:30,
  weekday: 'MONDAY'
},
{
  endTime: 10:30,
  fixed: true,
  period: 'AM',
  startTime: 08:20,
  weekday: 'FRIDAY'
}
}];

还有一个像这样的对象

workingHoursWeek = [{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'MONDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'TUESDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'WEDNESDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'THURSDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'FRIDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'SATURDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'SUNDAY',
  checked: false
}];

我需要比较这两个对象并更新 workingHoursWeek 以获取 workingHours

的所有值

最后 workingHoursWeek 应该是这样的

workingHoursWeek = [{
  endTime: 11:30,
  fixed: true,
  period: 'AM',
  startTime: 10:30,
  weekday: 'MONDAY',
  checked: true
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'TUESDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'WEDNESDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'THURSDAY',
  checked: false
},
{
   endTime: 10:30,
  fixed: true,
  period: 'AM',
  startTime: 08:20,
  weekday: 'FRIDAY',
  checked: true
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'SATURDAY',
  checked: false
},
{
  endTime: null,
  fixed: false;
  period: 'AM';
  startTime: null;
  weekday: 'SUNDAY',
  checked: false
}];

有没有简单的方法将对象属性重新映射到新对象? 谢谢

【问题讨论】:

  • 您想将两个对象合并为一个吗?
  • 好的,谢谢
  • 你想如何比较这两个对象?
  • 我想根据另一个对象上的值更新对象,请看我的例子,你会说现在只有 MONDAY 和 FRIDAY 有值并检查为 true

标签: angular typescript


【解决方案1】:

非常简单,使用 forEach() 循环:

this.workingHoursWeek.forEach(day => {
  this.workingHours.forEach(newDay => {
    if (day.weekday === newDay.weekday) {
      day.endTime = newDay.endTime;
      // etc, update other times and check value to true
    }
  });
});

【讨论】:

    【解决方案2】:

    尝试使用:

    this.workingHours.forEach(newDay => {
    this.workingHoursWeek.find(function(element){
            if(element.weekday === newDay.weekday){
               element = newDay;
             }
         })
      })
    

    【讨论】:

      【解决方案3】:
      this.workingHoursWeek.forEach(day => {
         this.workingHours.forEach(newDay => {
            if (day.weekday === newDay.weekday) {
               day.endTime = newDay.endTime;
               // etc, update other times and check value to true
            }
         });
      });
      

      或者你也可以使用Lodash

      Npm 包https://www.npmjs.com/package/lodash 对于前 -

      var a = {};
      var b = {};
      
      a.prop1 = 2;
      a.prop2 = { prop3: 2 };
      
      b.prop1 = 2;
      b.prop2 = { prop3: 3 };
      
      _.isEqual(a, b); // returns false if different
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 2018-02-28
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多