javascript - 如何按第一个元素对象键对数组中的数组进行分组

标签 javascript arrays ecmascript-6

得到了这样的数组:

    let arr = [
      [
        {"key":2, "other":123},
        {"key":2, "other":222}
      ],
      [
        {"key":3, "other":0}
      ],
      [
        {"key":1, "other":11},
        {"key":1, "other":23}
      ],
      [
        {"key":1, "other":22}
      ]
    ]

我需要得到这个 arr 但分组数组的第一个元素具有相同的“键”值,所以它看起来像:

  let arr = [
      [
        {"key":2, "other":123},
        {"key":2, "other":222}
      ],
      [
        {"key":3, "other":0}
      ],
      [
        [
          {"key":1, "other":11},
          {"key":1, "other":23}
        ],
        [
          {"key":1, "other":22}
        ]
      ],

    ]

我尝试使用 reduce 函数,但结果完全不同。

let final = []
  for (let i=0; i<arr.length; i++) {

    let arr1 = i==0?arr:arr.slice(i)

    let final1 = arr1.reduce((acc,x)=> {

      acc = acc[0].key==x[0].key?acc.concat(x):acc
      return acc
    })
    arr1.length>1&&final.push(final1)
  }

在这段代码中,问题在于它将 arr[1] 与 arr[2]、arr[3] 进行比较,然后再次将 arr[2] 与 arr[3] 进行比较并将其分组(即使 arr[1].key和 arr[2].key 和 arr[3].key 是相同的)你能给一些提示或给出最终的功能来做到这一点吗?

最佳答案

let arr = [
      [
        {"key":2},
        {"key":2}
      ],
      [
        {"key":3}
      ],
      [
        {"key":1},
        {"key":1}
      ],
      [
        {"key":1}
      ]
    ]
var myMap = new Map();
for (i = 0; i < arr.length; i++) { 
    if(!myMap.has(arr[i][0]['key'])){
        myMap.set(arr[i][0]['key'],i)
    }else if(myMap.get(arr[i][0]['key'])===undefined){

        myMap.set(arr[i][0]['key'],i)
    }else{
        myMap.set(arr[i][0]['key'],myMap.get(arr[i][0]['key'])+','+i)
    }
}
var out =[];
for(var v of myMap.values()){
    var s = String(v).split(",");
    var fi = s[0]
    var subarray =[]
    for(var i in s){
        subarray.push(arr[s[i]]) 
    }
    out[fi] = subarray;
}

您会在 out 数组中找到您的回复。希望对你有用

关于javascript - 如何按第一个元素对象键对数组中的数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377604/

相关文章:

c# - 重新排序将空值放在 C# 末尾的数组

javascript - 如何阅读 es6/javascript 中的函数组合?

javascript - 使用异步 js 迭代数组并在回调中执行函数以返回单个结果

javascript - 如果选择选项后隐藏子级,如何隐藏父级 div

javascript - 使用 Canvas 拍摄嵌入视频的快照

javascript - 授权代码请求时 Google OAuth2 response_type 错误

java - 这是 "Increase"ArrayList 大小的最佳方法吗?

javascript - 如何使用 HTML 元素设置动态 JavaScript 数组,然后为其设置属性

javascript - 在 Javascript 中调用它之前确保嵌套对象值存在的最佳方法

javascript - ES6 构造函数对象参数默认值