Json Object使用AngularJS无法正常工作

时间:2015-05-26 07:32:40

标签: javascript json angularjs

我有一定数据的数据。我想创建一个json对象来管理规则。根据我的需要创建一个json对象是有问题的。这是我的数组数据。

 $scope.data = ["Crust^Pan^Medium=NA", "Crust^Pan^Large=NA", "Crust^Thin Crust^Medium=10.50"]

我想要这样的输出:

  {
     "Pan": {
             "Medium": NaN,
             "Large": NaN,
          },
    "Thin Crust": {
             "Medium": 10.50
          }
   }

这是我的代码,

   $scope.crustRule = {};


    for(var i=0; i<$scope.data.length; i++) {
        var tempCrust = {};                        
        var trimOne = $scope.data[i].split('^');
        var trimTwo = trimOne[2].split('=');
        if(trimOne[0] == 'Crust') {
           tempCrust[trimTwo[0]]=parseFloat(trimTwo[1]);
           $scope.crustRule[trimOne[1]].push(tempCrust);
        }
    }
    console.log($scope.crustRule);

2 个答案:

答案 0 :(得分:1)

首先需要创建一个对象$scope.crustRule[trimOne[1]],然后才能将对象推入其中。像

这样的东西
$scope.crustRule[trimOne[1]] = {};
$scope.crustRule[trimOne[1]].push(tempCrust);

答案 1 :(得分:1)

推送功能必须存在。如果需要,可以从Array属性中获取它。 只有在它必须在对象结构中时才这样做

var x = {length:0,push:Array.prototype.push};
x.push("jump");
console.log(x);//Object {0: "jump", length: 1}

I go over the mininmum requirement for some array functions to work on an object

Mimic the structure of a javascript array object

修改 我注意到你的需要是一个没有长度和字符串索引的对象,而不是基于数字索引。去测试一些东西

darn我希望已经存在一些疯狂的东西并尝试了

var x = {};
x += {"BadGuy": "Joker"};
console.log(x)//[object Object][object Object] //:(

所以我做了自己的推送功能

var x = {push:ObjPush};
x.push("jump");//Object cannot add (string) yet Coming soon
y = {"BadGuy": "Joker"};
x.push(y);
console.log(x);//{"BadGuy": "Joker"};

function ObjPush(obj)
{
    if ((typeof obj).toLowerCase() == "object")
    {
        for (var i in obj)
        {
            this[i] = obj[i];
        }
    }
    else
    {
        console.log("Object cannot add (" + typeof obj + ") yet\n Coming soon");
    }
}
  

注意:   我没有添加任何处理来检查相同的属性。因此,任何具有相同名称的属性覆盖原始属性。

修改 我将我的代码与你的代码集成在一起,不幸的是有一个奇怪的输出。 由于某种原因,而不是添加媒介和大型作为内部对象的属性,它只添加最后1,例如我得到输出

{"Pan":{"Large":null},"Thin Crust":{"Medium":10.5}}

修改 好的,我找到了我的问题所在。我现在得到预期的输出。添加了一个检查,以确保$ scope.crustRule [trimOne [1]]仅在尚不存在的情况下进行初始化。

if(typeof $scope.crustRule[trimOne[1]] == "undefined")
    $scope.crustRule[trimOne[1]] = {push:ObjPush};