首页 >社区问答列表 >javascript - 这样的对象怎么变成数组或者指定的对象格式?

javascript - 这样的对象怎么变成数组或者指定的对象格式?

数据结构形如:

 var result={
    "2":"3",
    "3":{
        "4":true,
        "5":true
    },
    "8":"16",
    "9":{
        "19":false,
        "20":true,
        "21":false,
        "22":false
    }
  }

里面每一项都是字符串,我想变成这样的格式:
[2,3;3,4,5;8,16;9,20] 或者其他格式也可,只要是这种结构就可以

注:有多个参数且属性为true才能获取

使用原生JS该怎么写? 非常感谢

  • 伊谢尔伦
  • 伊谢尔伦    2017-06-14 10:56:113楼

    供参考

    function getArr (data) {
      function compare (a, b) {
        return Number(a) - Number(b)
      }
    
      return Object.keys(data)
        .filter(k => data[k] !== false)
        .sort(compare)
        .reduce((arr, k) => {
          arr.push(Number(k))
          var value = result[k]
     
          if (typeof value === 'string') { arr.push(Number(value)) }
          else if (typeof value === 'object' && value !== null) {
            arr = arr.concat(Object.keys(value).filter(k => value[k]).sort(compare).map(k => Number(k)))
          }
          return arr
        }, [])
    }

    +0添加回复

  • 回复
  • 曾经蜡笔没有小新
  • 曾经蜡笔没有小新    2017-06-14 10:56:112楼

    https://jsfiddle.net/hsfzxjy/...

    function transform (data) {
        let result = []
        Object.keys(data)
            .forEach(key => {
                let values, value = data[key]
                if (typeof value === 'object')
                    values = Object.keys(value).filter(k => value[k])
                else
                    values = [value]
                if (values.length)
                    result.push([key].concat(values))
            })
        return result
    }

    +0添加回复

  • 回复
  • 黄舟
  • 黄舟    2017-06-14 10:56:111楼

    JSON.stringify(result)
        .replace(/"/g, '')
        .replace(/}/g, ',}')
        .replace(/\d+:false,/g, '')
        .replace(/:true,/g, ':')
        .replace(/{|}/g, '')
        .replace(/:,/g, ',')
        .replace(/,$/, '')
        .split(',')
    

    // [ '2:3', '3:4:5', '8:16', '9:20' ]

    +0添加回复

  • 回复