JS 处理Json对象

有道JS题,如下:

[
    {'Num':'2'},
    {'Num':'4'},
    {'Num':'8'},
    {'Num':'9'},
    {'Num':'13'},
    {'Num':'15'},
    {'Num':'19'},
    {'Num':'23'},
]

要求:
Num的值在区间0~6之间,在json对象上加上键值对 'a':0;
Num的值在区间6~12之间,在json对象上加上键值对 'a':1;
Num的值在区间12~18之间,在json对象上加上键值对 'a':2;
Num的值在区间18~24之间,在json对象上加上键值对 'a':3;

结果这样:

 [
    {'Num':'8','a':'1'},
    {'Num':'2','a':'0'},
    {'Num':'13','a':'2'},
    {'Num':'4','a':'0'},
    {'Num':'9','a':'1'},
    {'Num':'15','a':'2'},
    {'Num':'19','a':'3'},
    {'Num':'23','a':'3'}
]

因为最近大量做JS的数据处理,看了一些JS题,上网请教下其他朋友的思路和方法。谢谢

阅读 3k
4 个回答

这是,我个人觉得还是先对JSON进行遍历,针对不同的Num值,得到不同的a值,然后用字符串吧这些加起来,然后在调用JSON.parse()函数进行字符串到json的转换。我简单的写了个小函数,你可以参考下!!

    function jsonAdd(json) {
        var nArr=[];
        var ss='[';
        json.map((x)=>{
            var num=parseInt(x.Num);
            ss+='{"Num":'+num+","+'"a:":';
            if(num>0&&num<=6){
                ss+='0},';
            }else if(num>6&&num<=12){
                ss+='1},';
            }else if(num>12&&num<=18){
                ss+='2},';
            }else if(num>18&&num<=24){
                ss+='3},';
            }
        })
        ss = ss.substring(0, ss.length - 1);  
        ss+="]";
        return JSON.parse(ss);
    }

调用函数,传入原始数据,返回一个修改后的数据.

别人说Map一下没说错啊,另外json的属性名是双引号。拿走不谢

var obj = json.map(function (t) {
    var val = +t['Num'];
    t['"a"'] = Math.floor(val/6).toString();
    return t;
});
var json = '[{"Num":"2"},{"Num":"4"},{"Num":"8"},{"Num":"9"},{"Num":"13"},{"Num":"15"},{"Num":"19"},{"Num":"23"}]';
var obj = JSON.parse(json);
for(var o in obj)
{
    obj[o]['a'] = parseInt(obj[o]['Num'] / 6);
}
json = JSON.stringify(obj);
console.log(json)

ps:你这个不是json

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题