Javascript 如何根据子属性将JSON排序到数组中
我有一个RESTful调用,它返回的数据类似于以下内容: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推送到该对象。如果没有,就做一个新的。在本例中,将所有对象嵌套在一天之下,因此新数
[{
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
->