我有一个数组:
myData: [{
name: "",
lastName: "",
historicalData: [{
data1: '',
data2: 0,
},
{
data1: '',
data2: 30,
}
]
},
{
name: "",
lastName: "",
historicalData: [{
data1: '',
data2: 6,
},
{
data1: '',
data2: 1,
}
]
}
]
我想迭代这个数组,过滤它以获得data2>的所有数据。 2.然后按data1对结果进行排序。
由于它是对象数组中的嵌套对象数组,因此我不确定如何在es6中进行迭代和过滤。
有什么建议吗?
myData.filter(oneData => historicalData.data1 > 2)
但最初我还要映射历史数据。 预期结果:
myData: [{
name: "",
lastName: "",
historicalData: [{
data1: '',
data2: 30,
}]
},{
name: "",
lastName: "",
historicalData: [{
data1: '',
data2: 6,
}]
}]
一旦我得到了这个结果,我就可以进行相应的排序。 感谢
答案 0 :(得分:0)
您可以构建新对象并过滤historicalData
。
此解决方案不会改变原始数据。
var data = [{ name: "", lastName: "", historicalData: [{ data1: '', data2: 0, }, { data1: '', data2: 30, }] }, { name: "", lastName: "", historicalData: [{ data1: '', data2: 6, }, { data1: '', data2: 1, }] }],
filtered = data.map(o =>
Object.assign({}, o, { historicalData: o.historicalData.filter(({ data2 }) => data2 > 2) }));
console.log(filtered);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)
过滤
myData.map(x => x.historicalData = x.historicalData.filter(x => x.data2 >2))
如果你想排序
myData.map(x => x.historicalData = x.historicalData.filter(x => x.data2 >2).sort((y,z)=> y.data1.localeCompare(z.data1) ))
如果要进行排序和过滤而不进行变异
myData.map( m => {
return {
...m ,
...{ historicalData: m.historicalData.filter(data => data.data2 > 2) .sort((y,z)=> y.data1.localeCompare(z.data1))}
}
});
编辑:添加了localeCompare,因为它是进行字符串排序的正确方法。
答案 2 :(得分:0)
var myData = [{
name: "",
lastName: "",
historicalData: [{
data1: '',
data2: 0,
}, {
data1: '',
data2: 30,
}]
}, {
name: "",
lastName: "",
historicalData: [{
data1: '',
data2: 6,
}, {
data1: '',
data2: 1,
}]
}];
var res = myData.map( (a) => {
a["historicalData"] = a["historicalData"].filter( (aa) => aa["data2"] > 2 );
return a;
});
// since you were unclear about the historicalData
// array length and how you choose set to 0
res = res.sort( (a,aa) => a["historicalData"][0].data1 - aa["historicalData"][0].data1 );
console.log(res);