Eem*_*Jee 0 javascript arrays duplicates
所以我有一个对象数组,如下所示:
var array = [
{name:"Joe", date:'2018-07-01', amt:250 },
{name:"Mars", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Saturn", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Jupiter", date:'2018-07-01', amt:250 },
]
Run Code Online (Sandbox Code Playgroud)
我想这取决于如果过滤数据name,amount并date有重复.这个甚至不会过滤重复的名称.
var unique = array.filter((v, i, a) =>{ return a.indexOf(v) === i});
Run Code Online (Sandbox Code Playgroud)
我怎样才能过滤重复这一个基础上name,amount和date?
Leo*_*lia 10
Array.prototype.filter与 的解决方案Set:
var data=[{name:"Joe",date:"2018-07-01",amt:250},{name:"Mars",date:"2018-07-01",amt:250},{name:"Joe",date:"2018-07-02",amt:250},{name:"Saturn",date:"2018-07-01",amt:250},{name:"Joe",date:"2018-07-02",amt:250},{name:"Jupiter",date:"2018-07-01",amt:250}];
var filtered = data.filter(function({name, date, amt}) {
var key = `${name}${date}${amt}`;
return !this.has(key) && this.add(key);
}, new Set);
console.log(filtered);Run Code Online (Sandbox Code Playgroud)
小智 7
试试这段代码,它只返回唯一的对象.
var data = [
{name:"Joe", date:'2018-07-01', amt:250 },
{name:"Mars", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Saturn", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Jupiter", date:'2018-07-01', amt:250 },
]
var resArr = [];
data.filter(function(item){
var i = resArr.findIndex(x => (x.name == item.name && x.date == item.date && x.amt == item.amt));
if(i <= -1){
resArr.push(item);
}
return null;
});
console.log(resArr)
Run Code Online (Sandbox Code Playgroud)
请告诉我这不是你想要的.
试试这个:
var array = [
{name:"Joe", date:'2018-07-01', amt:250 },
{name:"Mars", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Saturn", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Jupiter", date:'2018-07-01', amt:250 },
]
var unique = Array.from(new Set(array.map(JSON.stringify))).map(JSON.parse);
console.log(unique)Run Code Online (Sandbox Code Playgroud)
var array = [
{name:"Joe", date:'2018-07-01', amt:250 },
{name:"Mars", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Saturn", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Jupiter", date:'2018-07-01', amt:250 },
]
let answer = [];
array.forEach(x => {
if(!answer.some(y => JSON.stringify(y) === JSON.stringify(x))){
answer.push(x)
}
})
console.log(answer)Run Code Online (Sandbox Code Playgroud)
替代解决方案。您可以使用 Array#forEach、Array#some、JSON.stringify 来实现您想要的
| 归档时间: |
|
| 查看次数: |
1214 次 |
| 最近记录: |