如何在javascript中从数组中提取数据

时间:2014-12-23 11:14:28

标签: javascript jquery arrays angularjs restangular

我有一个对象(数组类型),它的控制台表示看起来像下面的图像。请看图像

enter image description here

此数组由restangulr使用以下代码

创建
restangularProvider.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
                if (operation == "getList") {
                    var extractedData;
                    extractedData = data.result;
                    extractedData.paginginfo = data.paginginfo;
                    return extractedData;
                }
                if (operation != "get") {
                    var item = { status: response.status };
                    feedBackFactory.showFeedBack(item);
                }

                return response.data;
            });

如何读取此数组中的元素,我想提取paginginfo等属性,以及对象集合

//编辑:我在这里使用的1个js库angularjsu 1.3.4和restangular 1.4

我的app.js:这里我配置了rest angular provider

restangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
    if (operation == "getList") {
        var extractedData;
        extractedData = data.result;
        extractedData.paginginfo = data.paginginfo;
        return extractedData;
    }
    if (operation != "get") {
        var item = {
            status: response.status
        };
        feedBackFactory.showFeedBack(item);
    }

    return response.data;
});

//根据我的知识,这个函数将拦截每个ajax调用(api调用)并修改响应,遗憾的是我需要应用自定义修改,因为getlist方法必须返回集合但我的api返回对象,所以根据restangular,上面的代码是可能的解决方案,这里很好地获取数据。

userservice.js:这是使用restangular

的角度服务
function(restangular) {
    var resourceBase = restangular.all("account");

    this.getUsers = function(pagenumber, recordsize) {
        var resultArray = resourceBase.getList({
            page: pagenumber,
            size: recordsize
        }).$object;
    };

};

根据我的知识.at restangulr中的$ object解析了promise并带回了数据,同时我在控制台的图像中得到了resultArray,这里我可以记录这个数组,所以我觉得我得到了所有的来自服务器的数据并填写此对象。我应用了一些数组访问技术jquery和JavaScript,如索引库访问,关联访问,但我得到了未定义,即。

 resultArray[1] //undifiend;

4 个答案:

答案 0 :(得分:1)

在角度你可以使用angular.forEach(items,function(item){//你的代码在这里});

其中items是您要遍历的数组。

如果要访问某个特定位置,请使用[],例如var item = items [5]。

然后你可以做item.property。


更新

您的问题是您在Array JS对象中设置属性:

extractedData.paginginfo = data.paginginfo;

您应该按原样返回对象数据,并在控制器中执行以下操作:

var results= data.result;
var pagInfo= data.paginationInfo;

angular.forEach(results,function(result){});

答案 1 :(得分:0)

看起来这个数组是用数字索引的(0..1..5);你应该能够使用ForEach(在Angular中)或.each(在Jquery中)简单地遍历它。

像(JQuery):

$.each(array, function(key, value)
{
   // key would be the numerical index; value is the key:value pair of the array index's element.
   console.log(value.firstname); // should print the firstname of the first element.
});

答案 2 :(得分:0)

首先,正如我在评论中所说,你不应该将命名属性附加到数组。返回包含所需内容的对象:

if (operation == "getList") {
    return { values: data.result, paging: data.pagingInfo };
}

getList()方法返回一个promise,因此您需要使用:

this.getUsers = function(pagenumber, recordsize) {
    resourceBase.getList({
        page: pagenumber,
        size: recordsize
    }).then(function (data) {
        console.log(data.values[0]);
        console.log(data.paging.totalRecords);
    });
};

答案 3 :(得分:0)

您可以像这样访问您的数组属性:

http://jsfiddle.net/mmsmsj1r/

链接中显示的代码:

var arrayTest = [{
        id: 1,
        name: "john",
        lastname: "appleseed"
    }, {
        id: 2,
        name: "john",
        lastname: "appleseed"
    }, {
        id: 3,
        name: "john",
        lastname: "appleseed"
    }];
    var a;

    for (a in arrayTest) {
        console.log(arrayTest[a].id + " " + arrayTest[a].name + "                                " + arrayTest[a].lastname);

    }