如何通过Value获取对象索引?

时间:2015-06-02 09:48:01

标签: javascript json angularjs

Fissio的回答

我正在尝试在Angular中创建一个简单的搜索功能。当用户输入输入字段中的某些内容时,我想搜索我的JSON中的所有“标题”,如果一个单词与输入匹配,那么我想要带回与匹配相关的所有对象。

FACTORY

我首先创建了一个Factory,使用Promise从JSON检索数据。

.factory('podcastData', function($http) {

var podcastData = {

    async: function() {
        var promise = $http.get('http://radio-sante-animale.fr/podcast-data.php').then(function(response) {
            return response.data.categories;
        })
        return promise;
    }

};

return podcastData;

})

然后在我的控制器中,我尝试在我的控制器中执行搜索程序。 到目前为止,我设法做了一个for循环,我得到了数组的长度,然后我得到了数组中的所有'Podcasts',然后我设法得到所有与输入匹配的值。

CONTROLLER

更新

$scope.findValue = function(enteredValue) {
    console.log(enteredValue);
    var filtered = [];
    podcastData.async().then(function(data) {
        for (i = 0; i < data.length; i++) {
            angular.forEach(data[i].podcasts, function(podcasts, key) {

                var foundPodcasts = _.filter(podcasts, function(podcast) {                       
                    return podcasts.title.toLowerCase().indexOf(enteredValue) >= 0
                });

                if (typeof foundPodcasts !== 'undefined') {
                    filtered.concat(foundPodcasts);
                    console.log(foundPodcasts);
                };                 
            });
        }
    });

}

我更新了我的控制器,现在我确实得到了与搜索输入匹配的所有对象,但是当我在console.log foundPodcasts 时,这是我的回复。这很好!但是,中间有空数组,我无法进行NG-REPEAT,因为没有可以获取的值。

enter image description here

1 个答案:

答案 0 :(得分:2)

获得将filtered更改为数组的自由;我知道你想要找到所有匹配的电影,而在你的代码中你只是在每场比赛中重新创建filtered对象。

$scope.findValue = function(enteredValue) {
    var filtered = [];
    podcastData.async().then(function(data) {
        for (i = 0; i < data.length; i++) {
            var foundPodcasts = _.filter(data[i].podcasts, function(podcast) {
                return podcast.title.toLowerCase().indexOf(enteredValue) >= 0
            });
            if (typeof foundPodcasts !== 'undefined') {
                filtered = filtered.concat(foundPodcasts);
            };
        }
    console.log(filtered);
    return filtered;
});