javascript - 如何在javascript中过滤多维数组中的对象?

标签 javascript arrays multidimensional-array ecmascript-6 vuejs2

我希望通过练习过滤以下数据。例如,在所有日期进行所有深蹲。

enter image description here

我尝试映射锻炼值,但使用以下代码在 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/

相关文章:

javascript - Jquery 未捕获类型错误 : Cannot read property 'value' of null

php - 在 PHP 中使用 foreach 从数据库中检索数据

c - 修改被调用函数中的数组元素

c++ - 我如何解释多维 vector ?

java - 数组 : Find array[x][1] for different x

javascript - Rails braintree 在输入框的 focusout 上捕获错误

javascript - 尝试在 ember 中查找记录和销毁记录时,DELETE 请求在 GET 请求之前完成

php - 使用 simplexml_load_string 时只返回数组的第一个元素

c++ - 从 C++ 类实现二维矩阵

javascript - Typescript 接口(interface),使用字符串常量作为属性