按属性拆分对象数组



通过属性块化对象数组的最佳方法是什么?

我希望该对象的工作方式类似于一个没有默认值的case语句——它会继续冒泡。

输入

[  
   {  
      "type":"Break"
   },
   {  
      "type":"Not Break"
   },
   {  
      "type":"Break"
   },
   {  
      "type":"Not Break"
   },
   {  
      "type":"Break"
   },
   {  
      "type":"Not Break"
   },
   {  
      "type":"Not Break"
   },
   {  
      "type":"Not Break"
   },
   {  
      "type":"Not Break"
   },
   {  
      "type":"Not Break"
   },
   {  
      "type":"Break"
   }
]

输出

[[{"type":"Break"}, {"type":"Not Break"}], [{"type":"Break"}, {"type":"Not Break"}] ...]

谢谢,奥利

也许可以试试Objec.keys

myInputArray.forEach( myInputObject => {
  Object.keys(myInputObject).forEach( key => {
      if(key === 'type'){
          // Do magic
          // get the content by 
          myInputObject[key]
      }
      if(key === 'otherType'){
          // Do more magic
      }
  })
})

热烈问候

您可以使用reduce()进行分块,并在Break上推送一个新的子数组。这是在做一些假设(比如你的第一次是Break类型(,所以你需要弄清楚你的边缘案例,但它应该让你开始:

let arr = [ { "type":"Break"},{  "type":"Not Break"},{  "type":"Break"},{  "type":"Not Break"},{  "type":"Break"},{  "type":"Not Break"},{  "type":"Not Break"},{  "type":"Not Break"},{  "type":"Not Break"},{  "type":"Not Break"},{  "type":"Break"}]
 let chunks = arr.reduce((arr, item) => {
    if (item.type == 'Break')  arr.push([])  // create a new child
    arr[arr.length-1].push(item)             // push into last child
    return arr
}, [])
console.log(chunks)

如果我理解正确,每次初始type更改时,您都需要对输入数据进行分块。如果这个假设是正确的,你可以这样做:

var data = [{ "type": "Break" }, { "type": "Not Break" }, { "type": "Break" }, { "type": "Not Break" }, { "type": "Break" }, { "type": "Not Break" }, { "type": "Not Break" }, { "type": "Not Break" }, { "type": "Not Break" }, { "type": "Not Break" }, { "type": "Break" } ]
const result = data.reduce((r,c) => {
  r.length && c.type != r[r.length-1][0].type ? r[r.length-1].push(c) : r.push([c])
  return r
}, [])
console.log(result)

最新更新