Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象操作(分组)_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 对象操作(分组)

Javascript 对象操作(分组),javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个像这样的嵌套对象 data = { 2000: { 1: { a: {year: 2000, no: 1, alphabet: 'a'} }, 2: { a: {year: 2000, no: 2, alphabet: 'a'} }, 3: { a: {year: 2000, no: 3, alphabet: 'a'},

我有一个像这样的嵌套对象

data = {
    2000: {
        1: {
            a: {year: 2000, no: 1, alphabet: 'a'}
        }, 
        2: {
            a: {year: 2000, no: 2, alphabet: 'a'}
        },
        3: {
            a: {year: 2000, no: 3, alphabet: 'a'},
            b: {year: 2000, no: 3, alphabet: 'b'}
        }
    },
    2010: {
        1: {
            a: {year: 2010, no: 1, alphabet: 'a'}
        }, 
        2: {
            a: {year: 2010, no: 2, alphabet: 'a'}
        },
        3: {
            a: {year: 2010, no: 3, alphabet: 'a'},
            b: {year: 2010, no: 3, alphabet: 'b'}
        }
    }
}

requestedType = {
    years: [
    {
        year: "2000",
        nos: [
            {
                no: 1,
                alphs: [
                    {
                        alph: "a",
                        data: {year: 2000, no: 1, alphabet: 'a'}
                    }
                ]
            },
            {
                no: 2,
                alphs: [
                    {
                        alph: "a",
                        data: {year: 2000, no: 2, alphabet: 'a'}
                    }
                ]
            },
            {
                no: 3,
                alphs: [
                    {
                        alph: "a",
                        data: {year: 2000, no: 3, alphabet: 'a'}
                    },
                    {
                        alph: "b",
                        data: {year: 2000, no: 3, alphabet: 'b'}
                    }
                ]
            },
        ]
    },
    {
       year: "2010",
       nos: [........]
    }
    ]

}
我想将此数据更改为该结构

基本上我可以用这个函数来做,但我想动态地做

我尝试使用递归(在foreach循环中调用相同的函数,但它没有按我预期的方式工作。因为,我猜是因为Javascript的异步行为)

等待你的帮助,任何建议都将是完美的

编辑: 解决方案应该是动态的。它可能比这更复杂的数据结构。例如:
非常感谢您的回答,但实际上我不想得到硬编码的解决方案。也许我也应该把这一点添加到问题中,但假设它可能是更多嵌套对象,比如5-6步到内部

a:{b:{c:{d:{e:{data:data}}}等等

基本上你可以认为我们有一个包含所有这些的数组


田地。[“a”、“b”、“c”、“d”、“e”]

假设
requestedType.years
是一个数组,这就是您描述的(非常复杂的)结构:

//与您的完全相同,但格式更紧凑
常数数据={
2000: {
1:{a:{年份:2000,编号:1,字母表:'a'}},
2:{a:{年份:2000,编号:2,字母表:'a'}},
3:{a:{年份:2000年,第3号,字母表:'a'},
b:{年份:2000年,第3号,字母表:'b'}
},
2010: {
1:{a:{年份:2010,编号:1,字母表:'a'}},
2:{a:{年份:2010,编号:2,字母表:'a'}},
3:{a:{年份:2010年,第3号,字母表:'a'},
b:{年份:2010年,第3号,字母表:'b'}
}
}
常量requestedType={
年份:Object.entries(data.map)(年份=>{
返回{
年份:年份[0],
编号:Object.entries(年份[1]).map(年份内容=>{
返回{
否:年份内容[0],
alphs:Object.entries(yearContent[1]).map(itemContent=>{
返回{
alph:itemContent[0],
数据:itemContent[1]
}
})
}
})
}
})
}
console.log(requestedType)
我通过改变一点@GalAbra solution找到了一个解决方案


非常感谢你的帮助。你干得最好对象。条目是个好主意

年在requestedType数组类型中吗?目前yeaar 2000可用,添加2010将成为years阵列的一部分right@NagaSaiA是的,它肯定是数组。很抱歉造成混淆请分享问题中可能存在的5-6嵌套对象非常感谢您的回答,但实际上我不想得到硬编码的解决方案。也许我也应该把这一点添加到问题中,但假设它可能是更多嵌套对象,比如5-6步到内部。a:{b:{c:{d:{e:{data:data}}}}}等。我无法理解预期结果的逻辑,但我希望您可以使用它创建自己的解决方案:)
var years =  Object.keys(data)
years.forEach((year, i) => {
    var noData = result[year]
    years[i] = {year, no: noData}

    var nos =  Object.keys(noData)
    nos.forEach((no, j) => {
        var alpData = noData[no]
        nos[j] = {no, alphabet: alpData}
    });
    years[i]["nos"] = nos

    ....................

});
const data = {
  2000: {
    1: { a: { year: 2000, no: 1, alphabet: 'a' } },
    2: { a: { year: 2000, no: 2, alphabet: 'a' } },
    3: { a: { year: 2000, no: 3, alphabet: 'a' },
         b: { year: 2000, no: 3, alphabet: 'b' } }
  },
  2010: {
    1: { a: { year: 2010, no: 1, alphabet: 'a' } },
    2: { a: { year: 2010, no: 2, alphabet: 'a' } },
    3: { a: { year: 2010, no: 3, alphabet: 'a' },
         b: { year: 2010, no: 3, alphabet: 'b' } }
  }
}

var keys = ["year", "no", "alphabet"]

  function magic(data, i, keys){
      var label = keys[i] + 's'
      var next = keys[i+1] + 's'
      return Object.entries(data).map(el => {
        var res = {}
        res[label] = el[0]
        if(i !== keys.length-1){
            res[next] =  magic(el[1], i+1, keys)
        } else {
            var key = Object.keys(data)
            res["data"] = data[key[0]]
        }
        return res
      })
  }

r = magic(data, 0, keys)
console.log(r)