我有一定数据的数据。我想创建一个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);
答案 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};