Javascript 合并本地和服务器更新

Javascript 合并本地和服务器更新,javascript,redux,Javascript,Redux,需要合并2个更新列表,本地和服务器。 使用redux,但这并不重要,我需要刷新更新列表 const localUpdates = [ { id: 1, name: 'one', date: 'old' }, { id: 2, name: 'two', date: 'old' }, { id: 3, name: 'three', date: 'old' }, ]; const serverUpdates = [ { id: 1, name: 'one', date: 'new'

需要合并2个更新列表,本地和服务器。 使用redux,但这并不重要,我需要刷新更新列表

const localUpdates = [
  { id: 1, name: 'one', date: 'old' },
  { id: 2, name: 'two', date: 'old' },
  { id: 3, name: 'three', date: 'old' },
];

const serverUpdates = [
  { id: 1, name: 'one', date: 'new' },
  { id: 4, name: 'four', date: 'new' },
];
期望输出:

updates: [
  { id: 1, name: 'one', date: 'new' },
  { id: 2, name: 'two', date: 'old' },
  { id: 3, name: 'three', date: 'old' },
  { id: 4, name: 'four', date: 'new' },
]
感谢brainfreeze在过去一个小时里一直关注这一点,您可以使用Array.prototype.reduce,后跟Object.values来执行更新

const localUpdates=[ {id:1,名称:'one',日期:'old'}, {id:2,名称:'2',日期:'old'}, {id:3,名字:'3',日期:'old'}, ]; 常量服务器更新=[ {id:1,名称:'one',日期:'new'}, {id:4,名称:'4',日期:'new'}, ]; const concatArr=localUpdates.concatserverUpdates; //我们将排除相同id的新值 const resObj=concatArr.reduceac,项=>{ acc[item.id]={…acc[item.id]|{},…item}; 返回acc; }, {}
console.logObject.valuesresObj 创建一个临时对象,在两个数组上循环,并在临时对象中添加每个对象的id作为键,将整个对象作为值。具有相同id的对象将被覆盖。最后,使用Object.values获取数组中的合并对象

const localUpdates=[ {id:1,名称:'one',日期:'old'}, {id:2,名称:'2',日期:'old'}, {id:3,名字:'3',日期:'old'}, ]; 常量服务器更新=[ {id:1,名称:'one',日期:'new'}, {id:4,名称:'4',日期:'new'}, ]; 常量obj={}; localUpdates.forEachlocal=>obj[local.id]=local; serverUpdates.forEachserver=>obj[server.id]=server; console.logObject.valuesobj;
.作为控制台包装{max height:100%!important;top:0;}请显示您自己为解决此问题所做的任何尝试。您应该已经尝试过,我们可以帮助您调试。另外,从逻辑上讲,一种方法是在其中一个更新数组上循环。根据id查找匹配的元素,如果找到,则更新名称和日期。如果找不到,请添加新记录,可能是带有克隆的记录。但这里更重要的一点是将流程分解为更小的步骤,并一次一个地处理这些步骤;我太尴尬了,不能在这里发帖。我想我做的大多数尝试都会让人困惑,没关系。我们希望看到您的尝试,主要有两点。1它向我们表明你已经做出了努力,而不仅仅是在寻求解决方案,2它可以帮助我们确定你在哪里感到困惑。如果我们能确定你在哪里感到困惑,我们可以集中精力帮助你。如果id=464怎么办?@strdr4605这会有什么不同,奇怪的是存储在数组中@strdr4605您是否在谈论为reduce指定第二个参数时的输入错误?