【问题标题】:Get array parent key or combine with nested items获取数组父键或与嵌套项组合
【发布时间】:2019-06-06 04:39:07
【问题描述】:

我有以下带有数组的对象:

{
  "brands": [
    "accessible-icon",
    "accusoft",
    "adn",
    "adobe",
    "adversal",
  ],
  "regular": [
    "address-book",
    "address-card",
    "angry",
    "bell",
  ],
  "solid": [
    "ad",
    "address-book",
    "address-card",
    "adjust",
    "air-freshener",
    "align-center",
  ]
}

我有一个从数组组之一返回一项的函数。我必须找出该项目是从哪个数组组中提取的。据我了解,js中无法查找父键?

获取父键是理想的,否则,是否可以将父键添加到所有嵌套项?例如,brands 数组中的嵌套项将变为:

 "brands": [
    "brands-accessible-icon",
    "brands-accusoft",
    "brands-adn",
    "brands-adobe",
    "brands-adversal",
  ],

然后我可以使用正则表达式提取brands

更多信息:

最初我将对象转换为具有数组组的对象。这是名为brands 的对象之一的示例:

{
  "faAccessibleIcon": {
    "prefix": "fab",
    "iconName": "accessible-icon",
    "icon": [
      448,
      512,
      [],
      "f368",
    ]
  },
  "faAccusoft": {
    "prefix": "fab",
    "iconName": "accusoft",
    "icon": [
      640,
      512,
      [],
      "f369",
    ]
  },
  "faAcquisitionsIncorporated": {
    "prefix": "fab",
    "iconName": "acquisitions-incorporated",
    "icon": [
      344,
      512,
      [],
      "f6af",
    ]
  },
}

然后我简化对象:

const array = {
  "brands": Object.keys(brands).map(e=> brands[e].iconName),
  "regular": Object.keys(regular).map(e=> regular[e].iconName),
  "solid": Object.keys(solid).map(e=> solid[e].iconName),
};

array 成为我的问题顶部看到的带有数组的对象。数组结构必须保持不变。有没有办法将prefixiconName 组合起来,并在嵌套数组项中为每组数组获取brands-accessible-iconbrands-accusoft 等?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以获取对象的键并在数组中找到值。

    const getKey = (object, value) => Object.keys(object).find(k => object[k].includes(value));
    
    var data = { brands: ["accessible-icon", "accusoft", "adn", "adobe", "adversal"], regular: ["address-book", "address-card", "angry", "bell"], solid: ["ad", "address-book", "address-card", "adjust", "air-freshener", "align-center"] };
    
    console.log(getKey(data, "bell"));

    【讨论】:

    • 似乎对于具有相同名称的项目,它将使用相同的对象键。例如,如果 var data = { brands: ["accessible-icon", "accusoft"], regular: ["address", accusoft"]getKey() 将为两者返回 regular。我想没有办法解决吗?这些对象将具有具有相同项目名称的数组。
    • 您可以过滤而不是查找,而不是单个值。结果是一个包含可能键的数组。
    • 嗯,所以不用.find(k => object[k].includes(value)) 使用.filter(k => object[k].includes(value)) ?
    【解决方案2】:

    我认为有一个简单的答案。

    const array = {
      "brands": Object.keys(brands).map(e=> "brands-"+brands[e].iconName),
      "regular": Object.keys(regular).map(e=> "regular-"+regular[e].iconName),
      "solid": Object.keys(solid).map(e=> "solid-"+solid[e].iconName),
    };

    【讨论】:

      【解决方案3】:

      给你。

      通过获取对象的条目,然后映射每个对象以将其父对象的名称添加到其字符串中,您可以创建所需的输出。

      (除非我误解了你的问题,因为每个答案似乎都有不同的作用)

      工作示例:

      const data = {
          "brands": [
              "accessible-icon",
              "accusoft",
              "adn",
              "adobe",
              "adversal",
          ],
          "regular": [
              "address-book",
              "address-card",
              "angry",
              "bell",
          ],
          "solid": [
              "ad",
              "address-book",
              "address-card",
              "adjust",
              "air-freshener",
              "align-center",
          ]
      }
      
      const result = Object.entries(data).reduce((acc, [key, value]) => ({ ...acc, [key]: value.map(obj => key + '-' + obj) }), {})
      
      console.log(result)

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多