将Javascript group.json键值放入列表

将Javascript group.json键值放入列表,javascript,arrays,json,Javascript,Arrays,Json,我有以下json文件结构,包括从2008年到2020年的年份,以及其他键,如位置、名称等: {"2008": 50, "2009": 60, "2010": 70, "2011": 80, etc...} 我尝试将年份分组到另一个键中,并将其添加到原始数组中: {metric: [{"year": 2008, "perc": 50}, {"year

我有以下json文件结构,包括从2008年到2020年的年份,以及其他键,如位置、名称等:

{"2008": 50, "2009": 60, "2010": 70, "2011": 80, etc...}
我尝试将年份分组到另一个键中,并将其添加到原始数组中:

{metric:
    [{"year": 2008, "perc": 50},
     {"year": 2009, "perc": 60},
     {"year": 2010, "perc": 70},
     {"year": 2011, "perc": 80}],
 "2008": 50, 
 "2009": 60,
 "2010": 70,
 "2011": 80,
 etc...
}

我想我需要创建一个从2008年到2020年的范围,如果我检测到一个在该范围内的密钥,我将其添加到
metrics
组,并将其添加到数组中?

您拥有的是一个对象,而不是数组。您可以在
对象上使用
for in
循环或
for of
循环。通过对象循环输入
或类似项,然后将年份转换为一个数字,并将其与您的范围进行比较,如果它在范围内,则将其添加到
度量
数组:

const data={“2008”:50,“2009”:60,“2010”:70,“2011”:80,“2001”:20,“2002::30};
//在对象中循环
对象条目(数据)的常量[年,百分比]{
//以数字形式获取年份
const yearValue=+year;//参见下面的注释

如果(yearValue>=2008&&yearValue您拥有的是一个对象,而不是一个数组。您可以在
对象上使用
for in
循环或
for of
循环。通过对象输入
或类似于循环的条目,然后将年份转换为一个数字,并将其与您的范围进行比较,如果它在范围内,则将其添加到
循环中>公制
数组:

const data={“2008”:50,“2009”:60,“2010”:70,“2011”:80,“2001”:20,“2002::30};
//在对象中循环
对象条目(数据)的常量[年,百分比]{
//以数字形式获取年份
const yearValue=+year;//参见下面的注释

如果(yearValue>=2008&&yearValue,则需要循环对象并创建一个新对象

const group => obj {
    // create init object
    let output = {
        metric: []
    }

    // start loop
    for (const key in obj) {

        // check if object contains property
        if (Object.hasOwnProperty.call(obj, key)) {

            // check if key matches range and assign to metric if not
            if (!(/20(0[8-9]|1[0-9]|20)/gm).test(key)) output.metric.push({
                'year': key,
                'perc': obj[key]
            });
                
            //assign value if matches between 2008 to 2020
            else output[key] = obj[key]
        }
    }

    // return new object
    return output;
}

您需要在对象中循环并创建一个新对象

const group => obj {
    // create init object
    let output = {
        metric: []
    }

    // start loop
    for (const key in obj) {

        // check if object contains property
        if (Object.hasOwnProperty.call(obj, key)) {

            // check if key matches range and assign to metric if not
            if (!(/20(0[8-9]|1[0-9]|20)/gm).test(key)) output.metric.push({
                'year': key,
                'perc': obj[key]
            });
                
            //assign value if matches between 2008 to 2020
            else output[key] = obj[key]
        }
    }

    // return new object
    return output;
}
什么是“原始数组”?您的json格式为object。json是用于数据交换的文本符号。如果您处理的是JavaScript源代码,而不是字符串,那么您就没有处理json。什么是“原始数组”?您的json被格式化为对象。json是用于数据交换的文本表示法。如果您处理的是JavaScript源代码,而不是字符串,那么您就不是在处理json。