Javascript 在按值中的第一个字符对JSON对象数组进行分组时,如何将以数字开头的所有字符分组到同一组中?

Javascript 在按值中的第一个字符对JSON对象数组进行分组时,如何将以数字开头的所有字符分组到同一组中?,javascript,json,Javascript,Json,我一直在修补一个问题,我有一些JSON数据,我想根据对象名称值的第一个字母对对象进行分组 我可以用数组排序函数来完成这项工作。但有一件事我也在努力完成,那就是让任何以数字或任何非字母值开头的项目都被分组到一个单独的组中 现在一切都是按字母和数字分组的 以下是一些JSON示例: [{ "Id": 83107, "Name": "10-11", }, { "Id": 83107, "Name": "Bill", }, { "Id": 83107, "N

我一直在修补一个问题,我有一些JSON数据,我想根据对象名称值的第一个字母对对象进行分组

我可以用数组排序函数来完成这项工作。但有一件事我也在努力完成,那就是让任何以数字或任何非字母值开头的项目都被分组到一个单独的组中

现在一切都是按字母和数字分组的

以下是一些JSON示例:

[{
    "Id": 83107,
    "Name": "10-11",
},
{
    "Id": 83107,
    "Name": "Bill",
},
{
    "Id": 83107,
    "Name": "Jim",
},
{
    "Id": 83107,
    "Name": "7-11",
},
{
    "Id": 83107,
    "Name": "Walgreens",
},
{
    "Id": 83107,
    "Name": "Apple",
},
}]
这是我得到的结果:

{
   "1":[
      {
         "Id":83107,
         "Name":"10-11"
      }
   ],
   "7":[
      {
         "Id":83107,
         "Name":"7-11"
      }
   ],
   "A":[
      {
         "Id":83107,
         "Name":"Apple"
      }
   ],
   "B":[
      {
         "Id":83107,
         "Name":"Bill"
      }
   ],
   "J":[
      {
         "Id":83107,
         "Name":"Jim"
      }
   ],
   "W":[
      {
         "Id":83107,
         "Name":"Walgreens"
      }
   ]
}
我想做的是把所有的非字母值放到它们自己的组中,这样它们就都属于一个名为

以下是我目前使用的reduce函数:

var dataJSON = [{
        "Id": 83107,
        "Name": "10-11",
    },
    {
        "Id": 83107,
        "Name": "Bill",
    },
    {
        "Id": 83107,
        "Name": "Jim",
    },
    {
        "Id": 83107,
        "Name": "7-11",
    },
    {
        "Id": 83107,
        "Name": "Walgreens",
    },
    {
        "Id": 83107,
        "Name": "Apple",
    },
    }];

dataJSON.sort(function(a, b) {
  return a.Name[0].localeCompare(b.Name[0]);
});

var result = {};

for (var i = 0; i < dataJSON.length; i++) {
  var c = dataJSON[i].Name[0].toUpperCase();
  if (result[c] && result[c].length >= 0)

    result[c].push(dataJSON[i]);

  else {

    result[c] = [];
    result[c].push(dataJSON[i]);

  }
}

console.log(result);

您只需修改代码,检查名称的第一个字母是否为数字,然后将其添加到排序数据中的组中

您的代码看起来像这样

对于var i=0;i=0{ 结果[c].pushdataJSON[i]; }否则{ 结果[c]=[dataJSON[i]]; } }否则{ ifresult[]和&result[]长度>=0{ 结果[]。pushdataJSON[i]; }否则{ 结果[]=[dataJSON[i]]; } } } 笔记 这将导致结果具有键,但在该键中,项目将按数字的第一位进行排序。因此,键名为10-11的对象将位于键名为7-11的对象之前

使用dataJSON运行我的代码会得到这个结果

{ : [ { Id:83107, 姓名:10-11 }, { Id:83107, 姓名:7-11 } ], A:[ { Id:83107, 名称:苹果 } ], B:[ { Id:83107, 姓名:比尔 } ], J:[ { Id:83107, 姓名:吉姆 } ], W:[ { Id:83107, 姓名:沃尔格林 } ] }
问题中的内容不是JSON;它是一个对象文字表达式。他们看起来很相似。在JS代码中,JSON总是一个字符串。您可以构建一个数字映射:const nbGroup={0,1,2,3,4,5,6,7,8,9}。然后您可以在nbGroup中写入const isNb=result[C]或const isNb=resultC==0 | | nbGroup[result[C]]注意零,它是错误的。您也可以使用JavaScript集合,集合是为了方便您检查某个项目是否属于它,即您的信件是否属于数字集合。@有趣的代码室如果您能接受上述答案,如果它解决了您的问题,这将对未来的读者有所帮助抱歉我不得不处理一个意外的家庭紧急情况。你的解决方案非常完美,我非常感谢你的帮助。