如何在javascript中获取数组格式?

时间:2017-04-03 09:22:03

标签: javascript angularjs loopbackjs

我在AngularJs中使用工厂函数获取数组。这是控制台

Array[0]
  0: "value1"
  1: "value2"
  length:2

但是当我想得到数组的长度时

console.log(array.length)

从环回中的mysql获取数据

 app.factory("getFoo", function(Communications){
 return {
   getCommi: function(val,id){
    var array = [];
    var myVals = Communications.find({
                    filter: {
                        where: {
                            and : [{
                                communications_type_code : val
                            },{
                                object_id : id
                            }]
                        }
                    } 
                }, function(data){
                    for(var i=0; i< data.length; i++){
                        array[i] = data[i].contact_value;
                    }
                    return array;
        });

        return array;
      }
  }
});

控制器看起来像:

app.controller('usersFormCtrl', ['$scope','getFoo',function($scope,getFoo){
var emails = getFoo.getCommi(3,1);

setTimeout(function(){
    $scope.formModel.emails = [];
    for(var index=0; index < $scope.emails.length; index++){
        $scope.emails = emails;
    }
}, 0)
}])

我知道长度为0.为什么?

4 个答案:

答案 0 :(得分:1)

这是一个时间问题。第一次询问长度时确实为0,但是几秒钟后使用Chrome开发工具检查对象时,您正在检查现在已经填充的活动对象。

您可以使用setTimeout

进行确认
setTimeout(function(){
   console.log(array);
}, 0)

您可以查看此link以获取进一步说明

<强>更新

在角度中,使用$timeout代替setTimeout。像这样:

$timeout(function(){
   console.log(array);
}, 0)

答案 1 :(得分:0)

JavaScript中Array的length属性是不可变的。您可以通过定义其中的属性数量来设置数组的大小:var a = new Array(2),或者只传入您的值:var a = ['value1','value2']。

答案 2 :(得分:0)

您可以在此处将异步与同步方法混合使用。

Communications.find是异步的,但您可以在getCommi中使用它,例如同步功能。

当您致电getCommi时,该功能会立即返回空array

请按以下方式更改。

app.factory("getFoo", function(Communications){
 return {
   getCommi: function(val,id, cb){
    var array = [];
    var myVals = Communications.find({
                    filter: {
                        where: {
                            and : [{
                                communications_type_code : val
                            },{
                                object_id : id
                            }]
                        }
                    } 
                }, function(data){
                    for(var i=0; i< data.length; i++){
                        array[i] = data[i].contact_value;
                    }
                    cb(null, array);
        });   
      }
  }
});

app.controller('usersFormCtrl', ['$scope','getFoo',function($scope,getFoo){
getFoo.getCommi(3,1, function(err, emails){
  $scope.formModel.emails = [];
    for(var index=0; index < $scope.emails.length; index++){
        $scope.emails = emails;
    }
});    
}])

免责声明:我不知道有角度。

答案 3 :(得分:-1)

试试这个,

console.log(array[0].length)