gpt4 book ai didi

javascript - 使用键属性显示不同的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:08:14 24 4
gpt4 key购买 nike

我正在构建一个类别过滤器,但我一直在显示重复的选项。

我有一个对象数组:

filterData = [
{ name: 'Aang', bender: 'yes', nation: 'Air', person: 'yes', show: 'ATLA' },
{ name: 'Appa', bender: 'yes', nation: 'Air', person: 'no', show: 'ATLA' },
{ name: 'Asami', bender: 'no', nation: 'Republic City', person: 'yes', show: 'LOK' },
{ name: 'Azula', bender: 'no', nation: 'Fire', person: 'yes', show: 'ATLA' }
];

如您所见,'bender' 属性只有两个变体:yes 和 no。我试图获得一个单独的是和否数组:

benderArray = this.filterData.map((e) => {
return e.bender
})

我试图用选项标签显示每个值,但我只需要唯一值。

<select id="bender" value={this.state.bender}>
{benderArray.map(option => <option key={option} value={option}>{option}</option>)}
</select>

我怎样才能做到这一点?

最佳答案

您可以使用set,它会自动为您删除所有重复值:

const filterData = [{ name: 'Aang', bender: 'yes', nation: 'Air', person: 'yes', show: 'ATLA' }, { name: 'Appa', bender: 'yes', nation: 'Air', person: 'no', show: 'ATLA' }, { name: 'Asami', bender: 'no', nation: 'Republic City', person: 'yes', show: 'LOK' }, { name: 'Azula', bender: 'no', nation: 'Fire', person: 'yes', show: 'ATLA' }];

const filtered = [...new Set(filterData.map(i => i.bender))]
console.log(filtered)

您也可以将 setreduce 一起使用,并在进行时添加值:

const filterData = [{ name: 'Aang', bender: 'yes', nation: 'Air', person: 'yes', show: 'ATLA' }, { name: 'Appa', bender: 'yes', nation: 'Air', person: 'no', show: 'ATLA' }, { name: 'Asami', bender: 'no', nation: 'Republic City', person: 'yes', show: 'LOK' }, { name: 'Azula', bender: 'no', nation: 'Fire', person: 'yes', show: 'ATLA' }];

const set = new Set([])
const filtered = filterData.reduce((a, {bender:b}) => (!set.has(b) && set.add(b) && a.push(b), a), [])
console.log(filtered)

最后,您可以单独使用 reduce:

const filterData = [{ name: 'Aang', bender: 'yes', nation: 'Air', person: 'yes', show: 'ATLA' }, { name: 'Appa', bender: 'yes', nation: 'Air', person: 'no', show: 'ATLA' }, { name: 'Asami', bender: 'no', nation: 'Republic City', person: 'yes', show: 'LOK' }, { name: 'Azula', bender: 'no', nation: 'Fire', person: 'yes', show: 'ATLA' }];

const filtered = filterData.reduce((a, {bender:b}) => (!a.includes(b) && a.push(b), a), [])
console.log(filtered)

如果你愿意,你可以把它变成一个实用函数,这样你就可以在其他属性上调用它:

const filterData = [{ name: 'Aang', bender: 'yes', nation: 'Air', person: 'yes', show: 'ATLA' }, { name: 'Appa', bender: 'yes', nation: 'Air', person: 'no', show: 'ATLA' }, { name: 'Asami', bender: 'no', nation: 'Republic City', person: 'yes', show: 'LOK' }, { name: 'Azula', bender: 'no', nation: 'Fire', person: 'yes', show: 'ATLA' }];

const getUniqueValues = (data, prop) => {
const s = new Set([])
return filterData.reduce((a, {[prop]:p}) =>
(!s.has(p) && s.add(p) && a.push(p), a)
, [])
}

console.log(getUniqueValues(filterData, 'bender'))
console.log(getUniqueValues(filterData, 'show'))
console.log(getUniqueValues(filterData, 'nation'))

从这里JSPerf ,您可以看到 set + reduce 是最好的方法: JSPerf

关于javascript - 使用键属性显示不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com