在 javascript 中迭代数组

Iterate array in javascript

我的控制器中有一个创建搜索过滤器的功能。

搜索参数是从我的树枝模板的 select 字段中获得的。

selected 选项被传递给控制器​​以查看具有该值的结果。

查询结果return格式为JSON。

public function categoryAction(Request $request){

    $em = $this->getDoctrine()->getManager();

    $category = $request->request->get('category');

    $contentCategory = $em->getRepository('PublicartelAppBundle:Content')->findByCategory($category);

    $filterContent = new JsonResponse();

    $filterContent->setData([
        'category_result' => $contentCategory
    ]);

    return $filterContent;
}

$('#selectCategory').on('change', function () {
    var optionSelect = $(this).val();
    $.post("{{path('playlist_category') }}", {category: optionSelect}, 
    function (filterContent) {
        var result = filterContent.category_result;
        console.log(result);
    }, 'json');
});

控制台中的这个return:

[Object, Object, Object]

O: Object

1: Object

2: Object

lenght: 3

return编辑的项目数量取决于找到的属于该类别的项目数量。

如果我执行以下操作可以迭代每个元素。

for (var content in filterContent.category_result){
    console.log(content, filterContent.category_result[content]);
}

并且 return 在控制台中是这样的:

0 Object {}

1 Object {}

2 Object {}

但我想访问每个对象的 'name' 属性。

我怎么能说要访问对象名称 属性 ,或者至少每个都一一迭代?

您可以记录 filterContent.category_result[content].name 如果合适 属性。

试试这个看看 "name" 在哪里:

for (var content in filterContent.category_result) {
    console.log(content);
    for (var i in filterContent.category_result[content]) {
        console.log(filterContent.category_result[content][i]);
    }
}

问题是 findBy 存储库方法 return 一个 Doctrine ArrayCollection 填充了实体值。要将其翻译为有效的 JSON,您可以迭代它并将其翻译成一个简单的数组,如下所示在控制器中 class:

    $contentCategory = ....

    $contents = array();

    foreach($contentCategory  as $elem)
        $contents[] = array(
            'name' => $elem->getName();
            ....
        );


$filterContent = new JsonResponse();

        $filterContent->setData([
        'category_result' => $result
    ]);    

    return $filterContent;

您还可以考虑使用序列化程序作为 http://jmsyst.com/libs/serializer

希望对您有所帮助