在数组数组上使用lodash unique
using lodash unique on an array of arrays
我不知道如何使用它从主数组中删除重复的数组。因此考虑以下内容:
var arr = [
[0, 1],
[0, 1],
[2, 1],
];
得到的数组应该看起来像:
var arr = [
[0, 1],
[2, 1],
];
文档对于单个元素数组是有意义的,但对于2d数组则没有意义。
想法
更新,一些解决方案的一个小问题:
要变为唯一的数组可能具有:
var arr = [
[0, 1]
[0, 2]
[0, 3]
[0, 1]
[2, 1]
]
数组旁边的数组应该比较所有值,所以在上面的例子中,它应该吐出:
var arr = [
[0, 1]
[0, 2]
[0, 3]
[2, 1]
]
副本为[0, 1]
最简单的方法可能是使用uniq
方法,然后将内部数组转换为某种字符串表示,JSON.stringify
应该是足够好的解决方案。
var arr = [[0, 1], [0, 2], [0, 3], [0, 1], [2, 1]]
_.uniq(arr, function(item) {
return JSON.stringify(item);
});
// [[0,1], [0,2], [0,3], [2,1]]
您可以在lodash
:中使用.uniq
函数
var arr = [
[0, 1],
[0, 1],
[2, 1],
]
var uniqueList = _.uniq(arr, function(item, key, a) {
return item.a;
});
得到的数组看起来像:
//var arr = [Object: [0, 1], Object: [2, 1]];
当然,转换为JSON是可行的,但感觉我们可能在浪费资源。我在Node.js中使用以下Lodash代码:
const _ = require("lodash");
var arr = [
[0, 1],
[0, 1],
[2, 1],
];
var uni = _.uniqWith(arr, _.isEqual);
console.log(uni);
效果很好,请查看此处的回复。更多关于uniqWith的信息,请访问Lodash文档。
它不使用lodash,没有优化我同意:
//remove duplicate array of array of arrays
Array.prototype.uniqueArray = function() {
var uniqObj = {};
this.forEach(function (item) {
uniqObj[JSON.stringify(item)] = 1;
});
var uniqArray = [];
for(var key in uniqObj) {
if (uniqObj.hasOwnProperty(key)) {
uniqArray.push(JSON.parse(key))
}
}
return uniqArray;
};
相关文章:
- Lodash 从值数组中查找数组中的值
- 在lodash上有没有一个替代方案.merge.apply(_,x);其中x是对象的数组
- 对象数组的Lodash并集
- 与 lodash 进行对象深度比较的数组
- 使用lodash从对象数组中获取uniq[key,value]
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 有没有更简洁的方法可以从带有 lodash 的数组中删除条目
- Lodash 从与值数组不匹配的数组中获取项目
- Lodash:从数组中删除连续的重复项
- Lodash 在 JavaScript 中对对象数组进行排序
- 如何使用 lodash 在 Json 文件的数组中仅获取具有特定 atribute 的对象
- lodash/underscore.js函数来创建由x的n个副本组成的数组
- lodash:根据日期聚合和减少对象数组
- 用lodash转换带有对象的javascript数组
- 使用纯JavaScript或Lodash的JSON数组操作
- 如何使用Lodash从数组中查找多个结果
- 如何使用lodash返回与模式匹配的属性数组
- 如果数组中只有一个对象,则Lodash返回错误的reduce结果
- lodash:从对象数组中获取对象值
- 遍历数组,将总和作为对象添加到该数组 (lodash) 中