【问题标题】:filtering out specific keys in an object过滤掉对象中的特定键
【发布时间】:2017-11-10 09:58:54
【问题描述】:

我正在写出一个对象的键/值对。我正在尝试过滤掉对象中的两个键,如下所示:

{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 回调必须是函数"

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

谢谢!

【问题讨论】:

    标签: javascript reactjs react-native ecmascript-6


    【解决方案1】:

    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)

    【讨论】:

    • 我试过了,虽然它消除了错误,但它仍然显示所有 3 个属性。
    • 我已经更新了答案并添加了代码 sn-p,它似乎工作正常。
    • 哦,等等,我是否需要删除我的代码中的“ .map(([key,value], index) => ”部分?在这种情况下,“过滤器”会替换“地图”吗?谢谢!
    • 不,您仍然需要mapfilter 只过滤属性,map 负责返回组件。
    【解决方案2】:

    据我了解,您只想为属性 1 和 2 制作文本元素,您不必链接过滤器...您可以一次性完成:

    {Object.entries(params.char).filter(touple =>
       (touple[0] === 'Attribute1' || touple[0] === 'Attribute2')).map(touple => <Text key={touple[0]}>{touple[0]}</Text>)}
    

    【讨论】:

    • 我正在尝试写出对象中的所有内容,除了 2 件(属性 1 和属性 2)。我想过滤掉它们,这样它们就不会出现在屏幕上。谢谢!
    • 然后您可以将 === 切换为 !== 以便它抓取除这两个之外的所有内容,或者您​​可以使用 lodash 的 omit 将返回除您传递的键之外的所有内容
    • 这将不起作用,因为entries 方法返回数组的数组。请查看Object.entries 文档:developer.mozilla.org/pl/docs/Web/JavaScript/Reference/…
    • 啊,以前没有真正使用过它,所以如果你想要密钥,它只是那个 touple 的第一个索引。我会更新我的代码谢谢。如果只需要键,也可以使用 Object.keys
    【解决方案3】:

    你几乎是自己做的:)

    答案如下:

    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>
      );
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2018-01-28
      • 2022-10-05
      • 2022-11-17
      • 2018-09-28
      • 1970-01-01
      相关资源
      最近更新 更多