Разделение массива объектов по свойству - PullRequest
0 голосов
/ 12 ноября 2018

Каков наилучший способ разделения массива объектов по свойству?

Я хочу, чтобы объект работал аналогично оператору 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"}] ...]

Спасибо, Олли

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Вы можете использовать чанк, используя 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)
0 голосов
/ 12 ноября 2018

Если я правильно понимаю, вам нужно разбивать входные данные на блоки каждый раз, когда изменяется initial 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)
0 голосов
/ 12 ноября 2018

возможно, дайте 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
      }
  })
})

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...