我的数组类似于
[{ 's':1,'x': 1,'y':1 }, { 's':2,'x': 1,'y':1 },{ 's':3,'x': 1,'y':2 },{ 's':4,'x': 2,'y':1 },{ 's':5,'x': 2,'y':2 }]
其中需要X和Y的唯一组合。
输出为:
[{ 's':1,'x': 1,'y':1 },{ 's':3,'x': 1,'y':2 },{ 's':4,'x': 2,'y':1 },{ 's':5,'x': 2,'y':2 }]
由于第一和第二项中的X和Y值相同。 1个必须删除。
对于UniqBy我正在使用的单列
_.uniqBy([{ 's':1,'x': 1,'y':1 }, { 's':2,'x': 1,'y':1 },{ 's':3,'x': 1,'y':2 },{ 's':4,'x': 2,'y':1 },{ 's':5,'x': 2,'y':2 }], 'y');
但是我需要2个或更多键的组合。
_.uniqBy([{ 's':1,'x': 1,'y':1 }, { 's':2,'x': 1,'y':1 },{ 's':3,'x': 1,'y':2 },{ 's':4,'x': 2,'y':1 },{ 's':5,'x': 2,'y':2 }], '[x]','[y]');
还有很多。他们都没有工作/
[{ 's':1,'x': 1,'y':1 }, { 's':2,'x': 1,'y':1 },{ 's':3,'x': 1,'y':2 },{ 's':4,'x': 2,'y':1 },{ 's':5,'x': 2,'y
_.uniqBy([{ 's':1,'x': 1,'y':1 }, { 's':2,'x': 1,'y':1 },{ 's':3,'x': 1,'y':2 },{ 's':4,'x': 2,'y':1 },{ 's':5,'x': 2,'y':2 }], 'y');
[{ 's':1,'x': 1,'y':1 },{ 's':3,'x': 1,'y':2 },{ 's':4,'x': 2,'y':1 },{ 's':5,'x': 2,'y':2 }]
答案 0 :(得分:2)
使用filter
和findIndex
来实现极其简单的原始JavaScript解决方案(Lodash中的所有操作都可以在JavaScript中完成,Lodash可以简化操作):
const arr = [{'s':1,'x':1,'y':1},{'s':2,'x':1,'y':1},{'s':3,'x':1,'y':2},{'s':4,'x':2,'y':1},{'s':5,'x':2,'y':2}];
const res = arr.findIndex(({ x, y }, i, a) => i == a.findIndex(e => e.x == x && e.y == y));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Lodash解决方案:
使用_.uniqBy
将两个字段作为逗号分隔的值字符串进行比较:
const arr = [{'s':1,'x':1,'y':1},{'s':2,'x':1,'y':1},{'s':3,'x':1,'y':2},{'s':4,'x':2,'y':1},{'s':5,'x':2,'y':2}];
const res = _.uniqBy(arr, ({ x, y }) => `${x}${y}`);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
使用_.uniqWith
:
const arr = [{'s':1,'x':1,'y':1},{'s':2,'x':1,'y':1},{'s':3,'x':1,'y':2},{'s':4,'x':2,'y':1},{'s':5,'x':2,'y':2}];
const res = _.uniqWith(arr, ({ x, y }, { x: x1, y: y1 }) => x == x1 && y == y1);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
答案 1 :(得分:0)
您可以使用回调函数并连接数字。
console.log(_.uniqBy([
{ 's':1,'x': 1,'y':1 },
{ 's':2,'x': 1,'y':1 },
{ 's':3,'x': 1,'y':2 },
{ 's':4,'x': 2,'y':1 },
{ 's':5,'x': 2,'y':2 }
], el => `${el.x}${el.y}`));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.14/lodash.min.js"></script>