我正在写出一个对象的键/值对。我试图过滤掉对象中的2个键,如下所示:
{Object.entries(params.char).filter('Attribute1').filter('Attribute2').map(([key,value], index) => <Text key={key}>{key}</Text>)}
以下是“paramas”中的一个对象:
{
id: 1,
Name: "Drax Bravesword",
Rating: "*****",
XP: 392
Age: 34
Avatar: require('./images/profile1.png'),
Map: require('./images/map_1.png'),
Attribute1: "Power",
Attribute2: "Knowledge",
Attribute3: "Family"
}
但是当我运行这个时,我收到了这个错误:
“Array.prototype.filter回调必须是函数”
我不太确定如何解决这个问题,但有没有办法解决这个问题,还是我做错了?
谢谢!
答案 0 :(得分:4)
filter
数组方法接受函数作为参数,而不是字符串。所以请用这个:
Object.entries(params.char).filter((item) => (item.indexOf('Attribute1') || item.indexOf('Attribute2') > -1 ))...
let ob = {
Attribute1: 11,
Attribute2: 22,
Attribute3: 33
};
console.log('Not filtered', Object.entries(ob));
let result = Object.entries(ob).filter((item) => (item.indexOf('Attribute1') > -1 || item.indexOf('Attribute2') > -1 ));
console.log('Filtered:', result)
&#13;
答案 1 :(得分:1)
根据我的理解,您只想为属性1和2创建文本元素,您不必将过滤器链接起来......您可以一次性完成:
{Object.entries(params.char).filter(touple =>
(touple[0] === 'Attribute1' || touple[0] === 'Attribute2')).map(touple => <Text key={touple[0]}>{touple[0]}</Text>)}
答案 2 :(得分:0)
你几乎是自己做的:)
以下是答案:
render() {
const textElements = Object.entries(params.char)
.filter(([key]) => key !== 'Attribute1' && key !== 'Attribute2')
.map(([key, value]) => <Text key={key}>{key}, {value}</Text>);
return (
<View>
{textElements}
</View>
);
}