【问题标题】:Split an array into 2 arrays grouped by object attributes [duplicate]将数组拆分为按对象属性分组的 2 个数组 [重复]
【发布时间】:2019-12-28 01:53:31
【问题描述】:

我可以使用经典的 for 循环和条件实现将对象拆分为数组并按属性分组,但我想利用 JavaScript 功能特性,例如 map、filter 和 reduce。这是我想要实现的目标:

这是我的初始数据集:

let arr = [
    {type:"orange", title:"First"},
    {type:"orange", title:"Second"},
    {type:"banana", title:"Third"},
    {type:"banana", title:"Fourth"}
];

第一个期望的结果是:

[{type:"orange", title:"First"},
{type:"orange", title:"Second"}]

[{type:"banana", title:"Third"},
 {type:"banana", title:"Fourth"}]

第二个期望的结果是一个对象有两个数组:

 { "orange" : [ {type:"orange", title:"First"},
                {type:"orange", title:"Second"}],
   "banana" : [ {type:"banana", title:"Third"},
                {type:"banana", title:"Fourth"}]
 }

如何将对象转换为以 JavaScript 中特定属性为键的数组?

【问题讨论】:

  • 您不能在数组中使用key: value 语法,只能在对象中使用。第二个结果无效。
  • 您好,欢迎来到 Stack Overflow!您之所以被否决,是因为您列出了您的问题和期望的结果,但您没有提出具体问题或举例说明您是如何尝试这样做的。请添加该信息,您会得到更好的答案。
  • @JimmyBoyd 我同意在一个不是你希望使用的方法中给出编码示例没有多大意义。毕竟,向某人展示您知道如何用砖建造棚屋并不能帮助他们为您提供有关如何用木头建造棚屋的说明。此外,Ian 的评论完全是错误的——您确实问了一个具体的、可以回答的问题。这个问题的唯一“真正”问题是它已经被问过(以不同的形式,当然,不是相同的)并在 Stack Overflow 上得到了回答。不过,该问题已得到纠正。
  • 这个问题是discussed on Meta
  • 删除重复是没有意义的;使用此术语的新人如何找到源重复项?

标签: javascript ecmascript-6 functional-programming


【解决方案1】:

首先找到你的钥匙:

const keys = [...new Set(arr.map(x=>x.type))]

然后过滤数组并映射属性:

keys.map(x=>({[x]:arr.filter(s=>s.type==x).map(r=>({title:r.title}))}))

【讨论】:

    【解决方案2】:

    第一个:

        let arr = [
            {type:"orange", title:"First"},
            {type:"orange", title:"Second"},
            {type:"banana", title:"Third"},
            {type:"banana", title:"Fourth"}
        ];
    
        let oranges = arr.reduce((obj, cur) => {
            if(cur.type === "orange") {
              obj.push(cur)
            }
            return obj
    
        },[])
    
    
        let bananas = arr.reduce((obj, cur) => {
            if(cur.type === "banana") {
              obj.push(cur)
            }
            return obj
    
        },[])
    
        console.log(oranges)
        console.log(bananas)
    

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2018-10-07
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多