我正在使用 angular4。我需要显示具有唯一值的列表。
访问 API 时,我得到一个数组,从该数组我只需要显示唯一数据。我将在特定时间间隔访问该 API,并且仅当存在新数据时我才需要更新列表。
response= [{"id":"0DRDCH03DR51GGJGJNP80F7XZ8","value":"36af1784bec4_566601260"},{"id":"0DRDCFYGM2CAHAXYK96BPT9RHV","value":"36af1784bec4_566601140"},...]
listData = [];
for(let data of response) {
let tempValue = {id: '', time: ''};
let value = data.value.split('_')
if (value.length==2) {
if(value[value.length-1].length==2) {
tempValue.id = value[0];
tempValue.time = value[1];
}
let isPresent = false;
if(this.listData.length>0){
for(let value of this.listData){
if(value.time===tempValue.time){
isPresent = true;
}
}
}
if(!isPresent) {
this.listData.push(tempValue);
}
}
}
最终列表数据
listData = [{id:'36af1784bec4', time: '566601140'},...]
上面的函数确实给了我一个唯一的 listData
数组。我尝试使用 array.filter
和 new Set
但无法达到预期的结果。
我想知道是否有一种有效的方法来做到这一点。
最佳答案
您可以通过以下代码删除重复项。
var obj = {};
for ( var i=0, len=response.length; i < len; i++ )
obj[response[i]['id']] = response[i]; // if id Duplicate otherwise use value if the check on value.
response = new Array();
for ( var key in obj )
response.push(obj[key]);
console.log(response); // listData
编辑:
如果你想对你的 Prop 进行全面检查,那么你可以选择这个
function removeDuplicates(myArr, prop) {
return myArr.filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
});
}
console.log(removeDuplicates(response,['id','value'])); // for id or value use only 'id' or 'value' in second parameter.
关于javascript - 在数组中查找重复对象的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48073700/