【问题标题】:Data pass as objects as well as an array?数据作为对象和数组传递?
【发布时间】:2020-01-02 12:03:34
【问题描述】:

我正在为集团公司的管理董事开发一个系统。我需要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;

    }

谁能告诉我我在这里犯了什么错误?或者有什么方法可以达到我的预期?

【问题讨论】:

  • 你能出示你的控制器吗/
  • “我认为这是因为对于单个数据,它将显示为一个数组。但如果是多个数据,它将显示为对象。” 不,JavaScript 和控制台都不是如果/否则会这样做。为了帮助您,我们需要查看 minimal reproducible example 来演示问题,最好是使用 Stack Snippets([&lt;&gt;] 工具栏按钮;here's how to do one可运行。片段支持 Vue.js。
  • 尝试return $active_directors-&gt;toArray() 将对象转换为数组。你可以在它上面执行普通的数组函数。
  • @SandeepSudhakaran 我确实试过那个兄弟。但无法得到我预期的结果。非常感谢您为我付出的宝贵时间。

标签: javascript php jquery laravel vue.js


【解决方案1】:

很难从截图中看出,但 JavaScript 中的 Objects 不能使用标准的 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);
}

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

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

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

【讨论】:

  • 我确实尝试了最后一个伙伴。但是没有用。但我会试试上面的。非常感谢你的帮助。欣赏一下兄弟。
  • 谢谢你百万次。使用第二个我做了我需要的。
【解决方案2】:

您需要使用这样的查询,您必须在条件之前初始化查询

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


return $directorship;

    }

【讨论】:

  • 我也这样做了。但我需要的是从vue.js 访问数据。顺便感谢@monu0002的回答
猜你喜欢
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2012-01-25
  • 2021-12-22
  • 1970-01-01
  • 2015-05-08
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多