el_*_*_le 40 javascript underscore.js
我有一个对象数组,我想从它获得一个新的数组,它只是基于一个属性是唯一的,有一个简单的方法来实现这一点吗?
例如.
[ { id: 1, name: 'bob' }, { id: 1, name: 'bill' }, { id: 1, name: 'bill' } ]
Run Code Online (Sandbox Code Playgroud)
将导致名称= bill的2个对象被删除一次.
Col*_*inE 64
使用uniq功能
var destArray = _.uniq(sourceArray, function(x){
return x.name;
});
Run Code Online (Sandbox Code Playgroud)
来自文档:
生成数组的无副本版本,使用===来测试对象相等性.如果您事先知道数组已排序,则为isSorted传递true将运行更快的算法.如果要基于转换计算唯一项,请传递迭代器函数.
在上面的示例中,函数使用对象名称来确定唯一性.
如果您喜欢在没有Lodash的情况下自己做事,并且没有得到详细信息,请尝试使用可选的uniq by属性的uniq过滤器:
const uniqFilterAccordingToProp = function (prop) {
if (prop)
return (ele, i, arr) => arr.map(ele => ele[prop]).indexOf(ele[prop]) === i
else
return (ele, i, arr) => arr.indexOf(ele) === i
}
Run Code Online (Sandbox Code Playgroud)
然后,像这样使用它:
const obj = [ { id: 1, name: 'bob' }, { id: 1, name: 'bill' }, { id: 1, name: 'bill' } ]
obj.filter(uniqFilterAccordingToProp('abc'))
Run Code Online (Sandbox Code Playgroud)
或者对于普通数组,只需省略参数,同时记住要调用:
[1,1,2].filter(uniqFilterAccordingToProp())
更好,更快捷的方法
var table = [
{
a:1,
b:2
},
{
a:2,
b:3
},
{
a:1,
b:4
}
];
let result = [...new Set(table.map(item => item.a))];
document.write(JSON.stringify(result));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42120 次 |
| 最近记录: |