Javascript 如何使用Lodash';s unionBy和合并嵌套数组?

Javascript 如何使用Lodash';s unionBy和合并嵌套数组?,javascript,arrays,lodash,array-merge,Javascript,Arrays,Lodash,Array Merge,我希望将数组中的对象与一系列嵌套数组合并/组合。我想根据特定键合并对象(此处label[1])。我可以使用Lodash和unionBy通过标签[1]过滤出Dublicate,但如何保留过滤项中的值 阵列可以如下所示: var arr = [{ "label": ['item', 'private'], "values": [1, 2, 3] }, { "label": ['item', 'private'], "values": [1, 2, 3, 6]

我希望将数组中的对象与一系列嵌套数组合并/组合。我想根据特定键合并对象(此处
label[1]
)。我可以使用Lodash和unionBy通过
标签[1]
过滤出Dublicate,但如何保留过滤项中的值

阵列可以如下所示:

var arr = [{
    "label": ['item', 'private'],
    "values": [1, 2, 3]
  },
  {
    "label": ['item', 'private'],
    "values": [1, 2, 3, 6]
  },
  {
    "label": ['item', 'work'],
    "values": [1, 2, 8, 9]
  },
  {
    "label": ['item', 'private'],
    "values": [1, 2, 4, 5]
  },
  {
    "label": ['item', 'school'],
    "values": [1, 2, 7]
  }
];
所需输出为:

var arr = [{
  "label": ["item", "private"],
  "values": [1, 2, 3, 4, 5, 6 ]
}, {
  "label": ["item", "work"],
  "values": [1, 2, 8, 9]
}, {
  "label": ["item", "school"],
  "values": [1, 2, 7]
}]
这是一个样品,它只走了一半

var-arr=[
{标签:['item','private',值:[1,2,3]},
{标签:['item','private',值:[1,2,3,6]},
{标签:['item','work',值:[1,2,8,9]},
{标签:['item','private',值:[1,2,4,5]},
{标签:['item','school',值:[1,2,7]}
];
var结果=uu.unionBy(arr,“标签[1]”);
控制台日志(结果)

我不知道如何使用lodash实现这一点,但我认为unionBy无论如何都不是实现这一点的方法

下面是如何使用lodash按标签分组,然后将组减少为一个值以合并组中的项目

const arr=[{“label”:[“项”,“私有”],“值”:[1,2,3]},{“label”:[“项”,“私有”],“值”:[1,2,3,6]},{“label”:[“项”,“工作”],“值”:[1,2,8,9]},{“label”:[“项”,“私有”],“值”:[1,2,4,5]},{“label”:[“项”,“学校”],“值”:[1,2,7]};
console.log(
对象值(
_.groupBy(arr,(item)=>item.label.join(),//使用lodash分组依据
).地图((
组,//现在我们有了组数组的数组
) =>
组
.减少((结果,项目)=>({
//将一个组减少为一个对象
label:result.label,//设置标签
价值观:[
//使用所有项目的唯一值设置值
…新的一套(
(result.values | |[]).concat(item.values | |[]),
),
],
})),
),
);

我不知道如何使用lodash实现这一点,但我认为unionBy无论如何都不是实现这一点的方法

下面是如何使用lodash按标签分组,然后将组减少为一个值以合并组中的项目

const arr=[{“label”:[“项”,“私有”],“值”:[1,2,3]},{“label”:[“项”,“私有”],“值”:[1,2,3,6]},{“label”:[“项”,“工作”],“值”:[1,2,8,9]},{“label”:[“项”,“私有”],“值”:[1,2,4,5]},{“label”:[“项”,“学校”],“值”:[1,2,7]};
console.log(
对象值(
_.groupBy(arr,(item)=>item.label.join(),//使用lodash分组依据
).地图((
组,//现在我们有了组数组的数组
) =>
组
.减少((结果,项目)=>({
//将一个组减少为一个对象
label:result.label,//设置标签
价值观:[
//使用所有项目的唯一值设置值
…新的一套(
(result.values | |[]).concat(item.values | |[]),
),
],
})),
),
);

您也可以通过lodash做类似的事情:

var arr=[{“label”:['item',private'],“values”:[1,2,3]},{“label”:['item',private'],“values”:[1,2,3,6]},{“label”:['item',private'],“values”:[1,2,4,5]},{“label”:['item',school'],“values”:[1,2,7]}]
const merge=arr=>\uu0.reduce(arr,(r,c)=>\u0.union(r,c.values),[])
const result=((arr).groupBy('label'))
.条目()
.reduce((r[k,v])=>(r.push({label:k.split(',')),value:merge(v)}),r),[]))
console.log(结果)

您也可以通过lodash做类似的事情:

var arr=[{“label”:['item',private'],“values”:[1,2,3]},{“label”:['item',private'],“values”:[1,2,3,6]},{“label”:['item',private'],“values”:[1,2,4,5]},{“label”:['item',school'],“values”:[1,2,7]}]
const merge=arr=>\uu0.reduce(arr,(r,c)=>\u0.union(r,c.values),[])
const result=((arr).groupBy('label'))
.条目()
.reduce((r[k,v])=>(r.push({label:k.split(',')),value:merge(v)}),r),[]))
console.log(结果)
我要写:

const arr2 = _(arr)
    .groupBy("label")
    .map(objs => ({
        label: objs[0].label,
        values: _(objs).flatMap("values").uniq().value(),
    }))
    .value()
我会写:

const arr2 = _(arr)
    .groupBy("label")
    .map(objs => ({
        label: objs[0].label,
        values: _(objs).flatMap("values").uniq().value(),
    }))
    .value()

对美好的这对我来说是一个很好的开始:)谢谢!对美好的这对我来说是一个很好的开始:)谢谢!