Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 如何根据子属性将JSON排序到数组中_Javascript_Arrays_Json_Object_For Loop - Fatal编程技术网

Javascript 如何根据子属性将JSON排序到数组中

Javascript 如何根据子属性将JSON排序到数组中,javascript,arrays,json,object,for-loop,Javascript,Arrays,Json,Object,For Loop,我有一个RESTful调用,它返回的数据类似于以下内容: [{ name: "one", dayID: "Tuesday}, { name: "two", dayID: "Monday" }, { name: 'three' dayID: "Tuesday }] 我试图做的是迭代数据并创建一个新数组,该数组具有基于唯一属性的嵌套结构。因此,如果数组已经有星期一,则将json推送到该对象。如果没有,就做一个新的。在本例中,将所有对象嵌套在一天之下,因此新数

我有一个RESTful调用,它返回的数据类似于以下内容:

[{
  name: "one",
  dayID: "Tuesday},
 {
   name: "two",
   dayID: "Monday"
 },
 {
   name: 'three'
   dayID: "Tuesday
 }]
我试图做的是迭代数据并创建一个新数组,该数组具有基于唯一属性的嵌套结构。因此,如果数组已经有星期一,则将json推送到该对象。如果没有,就做一个新的。在本例中,将所有对象嵌套在一天之下,因此新数组如下所示:

[{"Monday":["two"]}, {"Tuesday":["one", "three"]}] 

实际上,这些不是字符串,它们是附加对象,但为了简单起见,我在示例中要求使用字符串。感谢您的帮助

由于键是唯一的,所以可以直接返回对象而不是数组

var数据=[{
名称:“一”,
dayID:“星期二”
}, {
姓名:“两个”,
dayID:“星期一”
}, {
姓名:"三",,
dayID:“星期二”
}]
var结果=数据.reduce(函数(r,e){
如果(!r[e.dayID])r[e.dayID]=[e.name];
else r[e.dayID].push(e.name);
返回r;
}, {})

log(result)
由于键是唯一的,所以您可以只返回对象,而不是数组

var数据=[{
名称:“一”,
dayID:“星期二”
}, {
姓名:“两个”,
dayID:“星期一”
}, {
姓名:"三",,
dayID:“星期二”
}]
var结果=数据.reduce(函数(r,e){
如果(!r[e.dayID])r[e.dayID]=[e.name];
else r[e.dayID].push(e.name);
返回r;
}, {})

console.log(result)
您可以使用
数组。reduce
将数组更新为所需格式

您只需根据条件不断更新
累计数组acc

var数据=[{
名称:“一”,
dayID:“星期二”},
{
姓名:“两个”,
dayID:“星期一”
},
{
姓名:"三",,
dayID:“星期二”
}];
数据=数据。减少((acc,cur)=>{
if(根据某些(a=>a[cur.dayID])){
acc.forEach(a=>{
if(当前日期ID){
a[cur.dayID].push(cur.name)
}
});
}否则{
var obj={};
对象[cur.dayID]=[cur.name];
加速推力(obj);
}
返回acc;
}, []);

控制台日志(数据)
您可以使用
数组。reduce
将数组更新为所需格式

您只需根据条件不断更新
累计数组acc

var数据=[{
名称:“一”,
dayID:“星期二”},
{
姓名:“两个”,
dayID:“星期一”
},
{
姓名:"三",,
dayID:“星期二”
}];
数据=数据。减少((acc,cur)=>{
if(根据某些(a=>a[cur.dayID])){
acc.forEach(a=>{
if(当前日期ID){
a[cur.dayID].push(cur.name)
}
});
}否则{
var obj={};
对象[cur.dayID]=[cur.name];
加速推力(obj);
}
返回acc;
}, []);
控制台日志(数据)将数组#reduce与助手对象一起使用:

var-arr=[{
名称:“一”,
dayID:“星期二”
},
{
姓名:“两个”,
dayID:“星期一”
},
{
姓名:"三",,
dayID:“星期二”
}
];
var helperObj={};
var结果=arr.REDUCT(函数(r,o){
如果(!helperObj[o.dayID]){
helperObj[o.dayID]=[];
r、 push({[o.dayID]:helperObj[o.dayID]});
}
helperObj[o.dayID].push(o.name);
返回r;
}, []);
控制台日志(结果)将数组#reduce与助手对象一起使用:

var-arr=[{
名称:“一”,
dayID:“星期二”
},
{
姓名:“两个”,
dayID:“星期一”
},
{
姓名:"三",,
dayID:“星期二”
}
];
var helperObj={};
var结果=arr.REDUCT(函数(r,o){
如果(!helperObj[o.dayID]){
helperObj[o.dayID]=[];
r、 push({[o.dayID]:helperObj[o.dayID]});
}
helperObj[o.dayID].push(o.name);
返回r;
}, []);

控制台日志(结果)显示您尝试过的内容。这个网站上有很多类似的问题。这里的目标不是为您编写代码,而是帮助您修复代码我还没有尝试过任何东西,我想看看人们会如何处理这个问题。使用
Array.reduce
->显示您尝试过的内容。这个网站上有很多类似的问题。这里的目标不是为您编写代码,而是帮助您修复代码我还没有尝试过任何东西,我想看看人们会如何处理这个问题。使用
Array.reduce
->