使用underscore.js查找基于对偶属性的唯一值
Using underscore.js to find unique values based on dual properties
使用Undercore.js,我试图在一个数组中获得唯一值,如下所示:
var links = [
{source: 0, target: 1},
{source: 0, target: 2},
{source: 0, target: 3},
{source: 0, target: 4},
{source: 0, target: 1},
{source: 4, target: 0}
];
结果是这样的:
var links = [
{source: 0, target: 1},
{source: 0, target: 2},
{source: 0, target: 3},
{source: 0, target: 4},
];
我想摆脱具有相同来源的链接&当然,目标对的顺序相同(0,1==0,1),但也希望去掉那些相同但相反的(0,4==4,0)。
我确信我可以用双嵌套的_.map()来完成它,但我想看看是否有Undercore魔术师有一个更干净、更合适的解决方案。
我认为_.uniq
就是答案。
uniq_.uniq(array, [isSorted], [iteratee])
更多信息
我相信您可以使用第三个参数(iteratee
)来提供一个自定义转换函数,该函数将在比较之前首先应用。
使用_.uniq的示例(http://jsfiddle.net/muto6zs1/):
function(item) {
// sort array of source and target and join it into a delimited string for a unique value
return [item.source, item.target].sort().join(',');
}
您已经使用下划线得到了答案,但为了帮助您了解幕后发生了什么,我提供了一个JavaScript示例:
var links = [
{source: 0, target: 1},
{source: 0, target: 2},
{source: 0, target: 3},
{source: 0, target: 4},
{source: 0, target: 1},
{source: 4, target: 0}
];
// create a temporary buffer to hold unique keys
var keys = {};
links.forEach(function(item, index) {
// this is the essential part of the uniqueness test
var item = [item.source, item.target].sort();
if (!keys.hasOwnProperty(item)) {
keys[item] = index;
}
});
// iterate over the unique keys and reconstruct a new array
links = Object.keys(keys).reduce(function(prev, index) {
prev.push(links[keys[index]]);
return prev;
}, []);
console.log(links);
相关文章:
- ng重复中的ng模型-初始化唯一作用域属性
- JavaScript-用唯一属性标识对象
- “new”关键字是在构造对象时自动设置“constructor”属性的唯一方法吗
- Ember JS如何获取具有唯一属性值的数组
- 角度:当您需要“跟踪”但您没有唯一的属性可以跟踪时,您会怎么做
- 动态删除没有唯一属性的输入字段
- 基于单个属性从数组中获取唯一对象
- 使用jQuery隐藏具有非唯一属性的元素
- Knockout.js中使用的唯一ID;对于“;单选按钮组中的标签属性
- Backbone.js在permalink集合中所有模型的唯一属性名称
- 如何检查具有唯一值的相同属性的同一类
- 页面上第二个表单所需的唯一 id 属性
- Lodash Javascript 基于唯一属性值返回元素
- 基于两个属性从 javascript 中的对象数组中获取唯一数组
- 如何使用 Wolfpack.js 测试我的 Sails.js 模型的唯一电子邮件属性
- 克隆元素,但它们必须具有“唯一属性”
- 未捕获的异常:每个数据元素都必须实现一个唯一的“id”属性slick.dataview.js
- 如何使Javascript数组按属性唯一
- 下划线/洛达什由多个属性唯一
- 识别数组中具有与另一个对象数组中属性唯一的对象的最快方法