假设我有以下内容:
var array =
[
{"name":"a", "category":1},
{"name":"a", "category":2},
{"name":"b", "category": 1}
{"name":"b", "category": 2}
]
我必须先找到一个包含所有不同名称的数组:
[
{"name":"a", "category":1},
{"name":"b", "category": 1}
]
我尝试过Set
,但仍能获得完整的阵列,我在做什么错了?
那是我的代码:
{data.length > 0 && [
...new Set(
data.map(item => {
item.name;
const pageChanges = {
departmentId: item.id,
departmentName: item.name,
};
return (
<Tile
text={item.name}
key={item.id}
/>
);
}),
),
]}
答案 0 :(得分:6)
只需根据name
道具过滤重复项
let values = array.filter((a, i, self) => {
return i === self.findIndex(z => z.name === a.name);
});
答案 1 :(得分:3)
使用这种方法,您可以将唯一值插入到集合中,而不是同名的第一项,但也要插入id
。结果基本上与转换前相同。
您可以使用Set
并过滤未知名称。
var array = [{ name: "a", "category": 1 }, { name: "a", "category": 2 }, { name: "b", "category": 1 }, { name: "b", "category": 2 }],
names = new Set,
distincts = array.filter(({ name }) => !names.has(name) && names.add(name));
console.log(distincts);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:1)
在您的示例中,使用Array.map函数可以对数组中的每个元素进行适当的编辑。这意味着生成的array.length将始终与原始array.length相同。您可以做的就是先绘制地图,然后进行过滤,但是最好还是先进行过滤或缩小。将它们放在一个集合中是个好主意,但是对象不等于{}!={}
,因此它们都会全部插入。