【问题标题】:Javascript filter() function to filter parent elementsJavascript filter() 函数过滤父元素
【发布时间】:2021-02-19 15:33:29
【问题描述】:

我在 JSON 对象中有一个嵌套项列表。我必须只过滤根节点(父节点)。

下面是 JSON 对象。

const myJSON = [
    {
        __typename: 'Query', node:
        {
            __typename: 'Item', childItems: [Object], id: 'a', label: 'node1', url: '#', parent: null
        }
    },
    {
        __typename: 'Query', node:
        {
            __typename: 'Item', childItems: [Object], id: 'b', label: 'node2', url: '#', parent: null
        }
    },
    {
        __typename: 'Query', node:
        {
            __typename: 'Item', childItems: [Object], id: 'a', label: 'node3', url: '#', parent: 'node1'
        }
    }
] 

这是我的 javascript 代码,对象是在对象变量中检索到的。

我只想从上述对象中过滤父节点的标签。

我的愿望输出应该是: 节点1 节点2 节点3 节点4

【问题讨论】:

  • 您的“JSON”无效。看起来像是控制台输出的复制粘贴。请以 JavaScript 文字表示法提供数组。
  • 是的,它是从控制台复制的。但类似
  • 如果您需要帮助,请提供重现问题的代码。我们不能将该控制台输出转换为有效数据。
  • menu [ { __typename: 'Query', node: { __typename: 'Item', childItems: [Object], id: 'a', label: 'node1', url: '#',父:空 } },{ __typename:'查询',节点:{ __typename:'Item',childItems:[Object],id:'b',标签:'node2',url:'#',父:null } } ]
  • @trincot 由于评论限制,我只发布了两个项目

标签: javascript ecmascript-6 filter


【解决方案1】:

为了在.filter()方法之后只获得想要的属性,可以使用.map()方法对最终数组进行变换。

请注意,我将 item.node.parent == null 更改为 !item.node.parent。像这样,它不仅仅针对null 的那些,而是针对那些falsy 的。如果这是您所期望的行为,请再次将其更改为 null

正如你在sn-p中看到的,使用map可以告诉我要保留数组的哪个属性

编辑:回答您的评论,当然您可以使用.map() 方法选择多个属性,只要您将其格式化为对象即可。函数filterParentAndObtainLabelAndUrl(input) 返回标签和url。如您所见,您可以轻松添加任意数量

const filterParentAndObtainLabelValue = (input) => {
    return input.filter(element => !element.node.parent)
        .map(element => element.node.label);
}

const filterParentAndObtainLabelAndUrl = (input) => {
    return input.filter(element => !element.node.parent)
        .map(element => {
            return ({
                label: element.node.label,
                url: element.node.url
            })
        })
}

const inputJSON = [{ "__typename": "Query", "node": { "__typename": "Item", "childItems": [null], "id": "a", "label": "node1", "url": "#", "parent": null } }, { "__typename": "Query", "node": { "__typename": "Item", "childItems": [null], "id": "b", "label": "node2", "url": "#", "parent": null } }, { "__typename": "Query", "node": { "__typename": "Item", "childItems": [null], "id": "a", "label": "node3", "url": "#", "parent": "node1" } }]

console.log('Just the label: ', filterParentAndObtainLabelValue(inputJSON))
console.log('Label and url: ', filterParentAndObtainLabelAndUrl(inputJSON))

【讨论】:

  • 是否可以通过label、URL等map函数返回多个值?
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多