【问题标题】:How to extract data from array in javascript如何在javascript中从数组中提取数据
【发布时间】:2014-12-23 11:14:28
【问题描述】:

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

这个数组是由 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这样的属性,也是对象集合

// 我在这里使用的 EDIT :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;
    };

};

据我所知,restanulr 中的 .$object 解决了承诺并带回了数据,我也得到了 resultArray,它看起来像控制台中的图像,在这里我可以记录这个数组,所以我想我得到了所有来自服务器的数据并填写在此对象中。我应用了一些可用的数组访问技术 jquery 和 JavaScript,如索引库访问、关联访问,但我得到了未定义的 ie。

 resultArray[1] //undifiend;

【问题讨论】:

  • 你是如何在控制台中打印出来的?这意味着您已经可以访问该数组。
  • @MasNotsram,它的骄傲,但基于索引的访问不起作用,即 d[0] 导致未定义
  • 仅供参考,将新属性分配给数组通常不好。您应该将分页信息与数组分开。例如{ items: data.result, pagingInfo: data.pagingInfo }(或者您可以只使用 data 而无需创建新内容来包含其值。
  • 您希望返回的值会去哪里?您的代码位于异步回调中。我假设您在未向我们展示的某些代码中遇到问题?您尝试访问数组的代码在哪里?

标签: javascript jquery arrays angularjs restangular


【解决方案1】:

在 Angular 中你可以使用 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){});

【讨论】:

  • @carlose verdes 对于这个数组,它在每个索引、0、1、2、3、4 等中给出未定义
  • 能否提供返回的json?我认为您正在混合数组结果和分页信息。
【解决方案2】:

看起来数组是数字索引的(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.
});

【讨论】:

    【解决方案3】:

    首先,正如我在 cmets 中所说,您不应该将命名属性附加到数组。返回一个包含您需要的对象:

    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);
        });
    };
    

    【讨论】:

      【解决方案4】:

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

      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);
      
          }
      

      【讨论】:

        猜你喜欢
        • 2017-08-03
        • 2018-09-12
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        相关资源
        最近更新 更多