【问题标题】:Filter arrays in Javascript and return all related objects在 Javascript 中过滤数组并返回所有相关对象
【发布时间】:2015-05-22 20:12:18
【问题描述】:

我想用 JavaScript 过滤一个对象数组。

array(
    (int) 0 => array(
        'DetailedWorkingHour' => array(
            'id' => '326',
            'start' => '07:00:00',
            'end' => '16:00:00',
            'date' => '2015-06-17',
            'working_hour_template_id' => '3'
        ),
        'WorkingHourTemplate' => array(
            'color' => 'red',
            'id' => '3'
        )
    ),
    (int) 1 => array(
        'DetailedWorkingHour' => array(
            'id' => '346',
            'start' => '07:00:00',
            'end' => '16:00:00',
            'date' => '2015-07-01',
            'working_hour_template_id' => '3'
        ),
        'WorkingHourTemplate' => array(
            'color' => 'red',
            'id' => '3'
        )
    )
)

这个过滤函数只返回DetailedWorkingHour 对象,但我需要将两者都作为返回数组

var filteredResult = filterByProperty(hours, "date", formattedDate);

function filterByProperty(array, prop, value){
    var filtered = [];

    for(var i = 0; i < array.length; i++){
        var obj = array[i];

        for(var key in obj){
            if(typeof(obj[key] == "object")){
                var item = obj[key];

                if(item[prop] == value){
                    filtered.push(item);
                }
            }
        }
    }    
    return filtered;
}

如何在返回的数组中同时拥有两个对象?

【问题讨论】:

  • 你的数组是什么语言的?
  • obj 推入filtered 而不是item
  • 数组是正确的 JSON 格式。上面的输出是 CakePHP 的调试输出。
  • 如果您发布 JSON 而不是 PHP 会更有帮助,因此我们可以将其粘贴到 Javascript 窗口中。
  • 什么是hoursformattedDate 是什么? “我需要将两者都作为返回数组”中的“两者”是什么?为什么要包含 CakePHP 的调试输出而不是 JS 代码?

标签: javascript arrays object filter


【解决方案1】:

obj 推入filtered 数组而不是item

function filterByProperty(array, prop, value){
    var filtered = [];

    for(var i = 0; i < array.length; i++){
        var obj = array[i];

        for(var key in obj){
            if(typeof(obj[key] == "object")){
                var item = obj[key];

                if(item[prop] == value){
                    filtered.push(obj);
                    break; // So we only push the object once if multiple matches
                }
            }
        }
    }    
    return filtered;
}

【讨论】:

  • Thx Barmar,解决了这个问题 :) 真的很感激。
猜你喜欢
  • 2021-02-26
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多