首页 > 解决方案 > 数据作为对象和数组传递?

问题描述

我正在为集团公司的管理董事开发一个系统。我需要filter为指定的公司担任董事。在我将数据传递controller给视图后,在选择公司时,过滤器显示不正确的结果。

在此处输入图像描述

上面的结果会显示当我console.log(this.directorships)那些。我认为这是因为对于单个数据,它将显示为array. 但如果这些倍数将显示为objects.

我正在循环那些内部for循环,如下所示打印结果。

for (let i = 0; i < this.directorships.length; i++) {
     single_director = this.directorships[i].director_profile;

     finalArray.push(single_director);
}

MyController.php

public function activeBoard($company_id){
        $directorship =  Directorship::with(['director_profile'])
            ->where('master_data_id',$company_id)
            ->get();

        $active_directors = $directorship->where('active',1);

        return $active_directors;

    }

谁能告诉我我在这里犯了什么错误?或者有什么方法可以做我所期望的吗?

标签: javascriptphpjquerylaravelvue.js

解决方案


从截图中很难看出,但Objects在 JavaScript 中不能使用标准for循环进行迭代,并且默认情况下没有长度属性。您应该首先检查 是否directorships是一个数组,然后适当地迭代或读取。例如:

let directorships_is_array = Array.isArray(directorships);

if(directorships_is_array) {
  // ... loop through array
}
else {
  // ... perform other function on object
}

有很多方法可以遍历一个对象,并获得一个对象的长度。新的for in循环可以遍历一个对象。例如:

for(let director in directorships) {
  console.log(director);
}

您还可以Object使用类似的方法获取长度,let directors_length = Object.keys(directorships).length然后执行以下操作:

let number_of_directorships = Object.keys(directorships).length;

for(let i=0; i<number_of_directorships; i++) {
  // ... iterate here
}

推荐阅读