我有一个对象数组。对象包含有关城市及其几何信息的信息。这是我的数组
> [ {country: "AM", name: "Abovyan", lat: 40.27368, lng: 44.63348},
> {country: "AM", name: "Abovyan", lat: 40.04851, lng: 44.54742},
> {country: "AM", name: "Kapan", lat: 39.20755, lng: 46.4057} ]
您可以看到我有2个具有相同名称的对象(例如Abovyan),但是它们的几何信息不同。我从一些API获得此数组,我想对其进行过滤。我如何将其过滤为只有一个具有特定键/值的对象,在这种情况下,该对象具有 name ?
我想得到一个像这样的过滤数组`
[ {country: "AM", name: "Abovyan", lat: 40.27368, lng: 44.63348},
{country: "AM", name: "Kapan", lat: 39.20755, lng: 46.4057} ]
答案 0 :(得分:1)
在这里,我们使用.name
属性作为对象键,从非重复项构建对象。完成后,我们从该对象中获取值数组。
var data = [ your data ];
var out = Object.values(
data.reduce( (c, e) => {
if (!c[e.name]) c[e.name] = e;
return c;
}, {})
);
答案 1 :(得分:1)
您可以Array.reduce()
进行输出:
var arr = [ {country: "AM", name: "Abovyan", lat: 40.27368, lng: 44.63348},{country: "AM", name: "Abovyan", lat: 40.04851, lng: 44.54742},
{country: "AM", name: "Kapan", lat: 39.20755, lng: 46.4057} ];
var res = arr.reduce((acc, obj)=>{
var exist = acc.find(({country, name}) => obj.country === country && obj.name === name);
if(!exist){
acc.push(obj);
}
return acc;
},[]);
console.log(res);
答案 2 :(得分:1)
let materials = [
{id: 1, name: "GALLERY PRINTS"},
{id: 2, name: "GALLERY PRINTS"},
{id: 3, name: "GALLERY PRINTS"},
{id: 4, name: "FINE ART PRINTS"},
{id: 5, name: "FINE ART PRINTS"}
]
let _materials = materials.filter((item, index, objects) => {
if (index === 0) {
return item;
} else if (item.name !== objects[index - 1].name) {
return item;
}
});
console.log(_materials);
答案 3 :(得分:0)
下面的代码执行类似于for..loop的基本过滤器,在该过滤器中,您返回true或false以删除或保留该项目。
我们可以使用map
方法创建一个临时数组,然后使用indexOf
方法查看是否可以在map
内部找到相同的对象。如果这样做,那么我们知道它是重复的。
var records = [ {country: "AM", name: "Abovyan", lat: 40.27368, lng: 44.63348},{country: "AM", name: "Abovyan", lat: 40.04851, lng: 44.54742},{country: "AM", name: "Kapan", lat: 39.20755, lng: 46.4057} ];
function removeDuplicates(myArr, prop) {
return myArr.filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
});
}
console.log(removeDuplicates(records,"name"));
答案 4 :(得分:0)
您可以过滤掉键中不存在的元素:
const unique = (arr, key) => {
const keys = new Set();
return arr.filter(el => !keys.has(el[key]) && keys.add(el[key]));
};
因此,在您的情况下,您可以将其用作unique([/*...*/, "name")