我希望通过练习过滤以下数据。例如,在所有日期进行所有深蹲。
我尝试映射锻炼值,但使用以下代码在 Vue 中出现错误。
this.workouts.map((y) => {
return console.log(y);
})
Uncaught TypeError: this.workouts.map is not a function
我也尝试过使用 for 循环,但遇到问题,因为键不是整数。
var result = [];
for (var i = 0; i < w.length; i++)
{
console.log(w[i]);
if (w[i] == '22-1-2018')
{
result.push(w[i]);
}
}
我几乎只需要跳过前两个级别。
结果将是一个对象数组。每个物体都会被过滤为深蹲,但也会详细说明次数、组数和重量。
最佳答案
您可以使用Object.keys
迭代对象属性
let filtred;
let wanted = "Squad"
Object.keys(workouts).forEach((date) => {
filtred[date] = {};
Object.keys(workouts[date]).forEach((bodypart) => {
workouts[date][bodypart].forEach((workout) => {
filtred[date][bodypart] = [];
if(workout.excercise == wanted){
filtred[date][bodypart].push(workout)
}
})
})
});
console.log(filtred); //here your new array
如果您想在过滤器中包含更多锻炼,您可以使用数组:
let wanted = ["Squad", "Deadlift", "AnotherOne"];
//...te same
// if(workout == wanted){ replacing this
if(wanted.indexOf(workout.exercise) !== -1){
正如你所看到的,复杂度为 O(n^3),所以你不应该使用这个过滤器来处理大量数据,如果你需要它,那么你应该改变你的结构以获得更简单的东西,这会花费你更多的内存但对于大量数据,过滤器会更快,如下所示:
let workouts = [
{
date: '22-01-2018'
bodypart: 'legs',
workout: 'sqad',
reps: 6,
sets: 46,
weight: 60
},
{
date: '22-01-2018'
bodypart: 'legs',
workout: 'Deadlift',
reps: 6,
sets: 46,
weight: 60
},
];
这样你就可以更快地过滤它:
let filtred = workouts.filter((w) => w.workout == 'sqad');
关于javascript - 如何在javascript中过滤多维数组中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392933/