当前位置: 首页 > 知识库问答 >
问题:

对象的角过滤和合并数组[重复]

方绪
2023-03-14

我有:

arrayBefore = [{name:'n1', items: [i1]}, {name:'n2', items: [i2]}, {name:'n1', items: [i3]}]
myFunction(arrayBefore)
arrayAfter = [{name:'n1', items: [i1, i3]}, {name:'n2', items: [i2]}]

我尝试使用map()和filter()实现myFunction,但无法使其正常工作。如果我有接近的想法,我会展示一些我尝试过的代码,不幸的是,情况并非如此。任何帮助都将不胜感激!

共有1个答案

刁文光
2023-03-14

reduce方法是您正在寻找的:

const result = arr.reduce((a, {name, items})=>{
     a[name] = a[name] || { name, items:[] };
     a[name].items.push(...items)
     return a;
 }, {});

一个例子:

let arr = [
    { name: 'n1', items: ['i1'] },
    { name: 'n2', items: ['i2'] },
    { name: 'n1', items: ['i3'] }
];

const result = arr.reduce((a, {name, items})=>{
     a[name] = a[name] || { name, items:[] };
     a[name].items.push(...items)
     return a;
 }, {});
 
 console.log(Object.values(result))
 类似资料:
  • 根据条件过滤一个对象数组,同时过滤掉未指定的键(key)。 使用 Array.filter() 根据断言 fn 过滤数组,以便返回条件为真值(truthy)的对象。 在过滤出来的数组上,使用 Array.map() 和 Array.reduce() 返回新的对象来过滤掉 keys 参数中未提供的键。 const reducedFilter = (data, keys, fn) => data.

  • 问题内容: 我有一系列对象,我想知道搜索它的最佳方法。给定以下示例,我如何搜索和?jQuery有什么可以帮助的吗?还是我必须自己蛮力搜​​索? 问题答案: 您可以使用:

  • 问题内容: 我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式): 当我执行ng-repeat时,我可以遍历所有这5个对象,例如: 但是, 我真正想要做的是仅对那些不是“ foo”类型的项进行迭代 ,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法: 但这不起作用。实际上,即使执行以下操作以将对象限制为

  • 问题内容: 我有两个阵列。我正在用PubSidebar过滤基于groupKey。 如果父母重视:日记或存款或任何价值或角色:公共,我在传递内容数组内的对象时遇到问题。我必须在基于的内容数组中传递值。 如果存在Journals and Deposits,则在内容数组内添加Journals and Deposit数据,包括公共数据。(三个对象) 如果存在Journals,则将Contents数组内的J

  • 问题内容: 是否可以通过多个值过滤对象数组? 例如,在下面的示例中,我可以按term_ids 5和6进行过滤,然后同时键入car吗? 如果可以轻松使用,肯定可以使用库。 问题答案: 您可以使用Array.filter

  • 问题内容: 让我们看一个例子。 我需要合并这两个对象数组并创建以下数组: 有没有JavaScript或jQuery函数可以做到这一点? 不适合我 它返回 问题答案: 如果要在JavaScript中合并2个对象数组。你可以使用这一招 例如 输出: