映射对象数组,并且仅采用唯一
Mapping Array of objects and only taking unique
有没有更优雅的方式来编写这行代码?
_.chain(_.uniqBy(someArray,"someProperty.name")).map("someProperty").value();
似乎我应该能够链接它,而不是将 lodash .uniqBy 调用嵌套在 .chain 调用中。
我希望以下内容有效,但不会。
_.chain(someArray).map("someProperty").value().uniqBy("name");
输入为:
someArray = [
{
aProp: '1',
anotherProp: '2',
thirdProp: '3',
someProperty: {
id: 1,
name: "john"
}
},
{
aProp: '3',
anotherProp: '4',
thirdProp: '5',
someProperty: {
id: 1,
name: "john"
}
},
{
aProp: '2',
anotherProp: 'f',
thirdProp: '6',
someProperty: {
id: 2,
name: "tom"
}
},
{
aProp: 't',
anotherProp: 'g',
thirdProp: 'f',
someProperty: {
id: 3,
name: "yacob"
}
},
];
输出应为:
[{id:1, name:"john"},{id:2, name:"tom"},{id:3, name:"yacob"}]
实际上,您走在正确的轨道上:
_.chain(data).map('someProperty').uniqBy('id').value()
如果你追求的是单个链,可能不是在 lodash 中,而是在纯 JS 中,这是一种完成任务的方法。
var arr = [
{
aProp: '1',
anotherProp: '2',
thirdProp: '3',
someProperty: {
id: 1,
name: "john"
}
},
{
aProp: '3',
anotherProp: '4',
thirdProp: '5',
someProperty: {
id: 1,
name: "john"
}
},
{
aProp: '2',
anotherProp: 'f',
thirdProp: '6',
someProperty: {
id: 2,
name: "tom"
}
},
{
aProp: 't',
anotherProp: 'g',
thirdProp: 'f',
someProperty: {
id: 3,
name: "yacob"
}
},
],
red = arr.reduce( (p,c) => {!~p[0].indexOf(c.someProperty.id) && (p[0].push(c.someProperty.id), p[1].push(c.someProperty.name)); return p}, [[],[]]).reduce( (p,c) => p.map( (n,i) => ({id:n,name:c[i]})));
document.write("<pre>" + JSON.stringify(red,null,2) + "</pre>");
然后我多考虑了一下,我想以下是使用纯 JS 完成这项工作的另一种方法。
red = arr.map( e => ({id: e.someProperty.id, name: e.someProperty.name})).reduce((p,c) => {!~p[0].indexOf(c.id) && (p[0].push(c.id), p[1].push(c)); return p},[[],[]])[1];
我很想看到这些的性能比较...
相关文章:
- 如何从数组中查找唯一对象
- 基于单个属性从数组中获取唯一对象
- 将唯一对象推送到JavaScript数组
- j根据特定对象属性查询唯一对象
- 按属性创建唯一对象的数组
- 使用带有对象的for循环打印出每个唯一对象的属性
- Three.js r73-将多个对象作为唯一对象来回旋转
- 通过比较和推送唯一对象来创建新的对象数组
- 仅向数组中添加唯一对象
- 如何通过使用Javascript比较两组数组来获得唯一对象
- 在JavaScript中只向数组添加唯一对象
- 使用对象作为键(不是字符串而是唯一对象)的关联映射的javascript方法是什么?
- Firebase push -删除唯一对象并插入新对象(基本上覆盖内容)
- 获取用户输入以创建唯一对象
- 是否有可能在不使用唯一对象属性的情况下区分两个对象?
- Javascript从object中创建唯一对象数组
- 唯一对象字面值键- javascript
- js获取一个唯一对象的数组
- 在javascript数组中查找唯一对象的最快速方法
- 将两个唯一对象推到一个空数组中会产生一个包含两个等效对象的数组