过滤掉对象中的特定键

时间:2017-06-08 15:30:37

标签: javascript reactjs react-native ecmascript-6

我正在写出一个对象的键/值对。我试图过滤掉对象中的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回调必须是函数”

我不太确定如何解决这个问题,但有没有办法解决这个问题,还是我做错了?

谢谢!

3 个答案:

答案 0 :(得分:4)

filter数组方法接受函数作为参数,而不是字符串。所以请用这个:

Object.entries(params.char).filter((item) => (item.indexOf('Attribute1') || item.indexOf('Attribute2') > -1 ))...

&#13;
&#13;
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;
&#13;
&#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>
  );
}