如何正确映射 obj 和 return 具有多个相同值的单个值 ReactJS

how to correctly map an obj and return a single value with several identical values ReactJS

我想解释一下我今天遇到的问题。

目前我有一个对象数组

我映射这个table

[
 { id: "a", location: "FR", zone: "EU" } ,
 { id: "b", location: "FR", zone: "EU" } , 
 { id: "c", location: "ES", zone: "EU" } , 
 { id: "d", location: "ES", zone: "EU" } ,
]

为了对所有数据进行排序,我使用 useEffect 只检索我需要的值

useEffect(() => {
    if (data) {
        const location = data.map((e) => {
            return {
                label: e.location,
            };
        });

        setLocations(locations);
    }
}, [data]);

这工作正常。

除此之外 returns 我的格式如下

0: {label: 'FR'}
1: {label: 'FR'}
2: {label: 'ES'}
4: {label: 'ES'}

我想要以下格式

  0: {label: 'FR'}
  1: {label: 'ES'}

基本上它会删除相同的密钥

我愿意接受任何建议,非常感谢。

使用过滤器和 indexOf

data = data.filter(function (value, index, array) { 
  return array.indexOf(value) === index;
});

由于您将 location 用作确定唯一性的 id-like 属性,因此您可以:

const data = [
  { id: "a", location: "FR", zone: "EU" } ,
  { id: "b", location: "FR", zone: "EU" } , 
  { id: "c", location: "ES", zone: "EU" } , 
  { id: "d", location: "ES", zone: "EU" } ,
];

console.log(
  Array
    .from(new Set(data.map(d => d.location)))  
    .map(label => ({ label }))
  
)

这首先将列表转换为字符串数组。它使用 Set 来去除重复的字符串。然后,它转换为所需的输出格式。

  • data.map(d => d.location) 给出 [ "FR", "FR", "ES", "ES" ]
  • Array.from(new Set(...)) 给出 [ "FR", "ES" ]
  • (...).map(label => ({ label })) 给出最终输出