通过属性块化对象数组的最佳方法是什么?
我希望该对象的工作方式类似于一个没有默认值的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)