根据属性将一个对象分成多个对象

时间:2019-01-18 03:01:31

标签: javascript

myObj = {1-inputWidth : '30px' , 1-inputHeight: '30px', 1-color : 'red',
        2-inputWidth : '20px' , 2-inputHeight: '10px', 2-color : 'blue',
        3-inputWidth : '60px' , 3-inputHeight: '70px', 3-color : 'white',  
        4-inputWidth : '90px' , 4-inputHeight: '10px', 4-color :'yellow', 
        scroll : 'auto', z-index : 1}
resultObj = {1: {1-inputWidth : '30px' , 1-inputHeight: '30px', 1-color : 'red'},
             2: { 2-inputWidth : '20px' , 2-inputHeight: '10px', 2-color : 'blue'}, 
             3: {3-inputWidth : '60px' , 3-inputHeight: '70px', 3-color : 'white'},  
             4: {4-inputWidth : '90px' , 4-inputHeight: '10px', 4-color :'yellow'}}

我有一个对象,其中大多数键以数字开头,而很少有键没有。我希望删除那些不是以滚动和z-index之类的数字开头的键,并且还要使一个嵌套对象的键作为与初始键号匹配的数字。这实际上让我很头疼。有人可以建议我如何做到这一点吗?预先谢谢你。

1 个答案:

答案 0 :(得分:1)

您可以遍历Object.entries,并用正则表达式查看每个键,看看它是否以数字开头。如果是这样,请将其添加到适当的子对象中:

let myObj = {'1-inputWidth' : '30px' , '1-inputHeight': '30px', '1-color' : 'red','2-inputWidth' : '20px' , '2-inputHeight': '10px', '2-color' : 'blue','3-inputWidth' : '60px' , '3-inputHeight': '70px', '3-color' : 'white',  '4-inputWidth' : '90px' , '4-inputHeight': '10px', '4-color' :'yellow', scroll : 'auto', 'z-index' : 1}

let o = Object.entries(myObj)
       .reduce((obj, [k, v]) => {
          let num = k.match(/^\d+/)              // get number in key?
          if (num) {                             // was there a match?
              if (obj[num]) obj[num][k] = v      // add new entry
              else obj[num] = {[k]: v}
          }
          return obj

       }, {})

console.log(o)