扩展/合并对象


Extending/Merging object

我目前正在尝试使用AngularJS扩展/推送/合并一个对象,我的问题是,当我进行扩展时,它添加了一个索引为0的对象,我不能再添加了,因为它们都获得了相同的索引0

//Original Object
{ "groups": { 
            "1": { "id": "1", "name": "object1"},
            "2": { "id": "2", "name": "object2"}
            }
}
//After running function
{ "groups": { 
            "0": { "id": "1", "name": "object0"}, //This is the new object no more can then be added
            "1": { "id": "1", "name": "object1"},
            "2": { "id": "2", "name": "object2"}
            }
}
//What I want
{ "groups": {                
            "1": { "id": "1", "name": "object1"},
            "2": { "id": "2", "name": "object2"},
            "3": { "id": "3", "name": "object3"},
            "4": { "id": "4", "name": "object4"} // etc
            }
}

我目前正在使用这个:

$scope.addGroup = function () {
    angular.extend($scope.audit.groups,[
        {
                "name": "",
                "questions": []
            }
        ]);
}

jsfiddle=https://jsfiddle.net/U3pVM/23760/

PHP对象目前是这样构建的,如果重组它会有所帮助,我非常愿意这样做。

public function getAllQuestionGroupsByAuditIdArray($id) {
    $questions = new Question();
    foreach ($this->getAllQuestionGroupsByAuditId($id) AS $key => $group) {
        $QuestionGroups[$key] = array(
            "id" => $group['id'],
            "name" => $group['name'],
            "questions" => $questions->getQuestionsByGroupIdArray($group['id'])
        );
    }

    return $QuestionGroups;
}
$this->response = array(
        "name" => $auditData['name'],
        "groups" => $questionGroups->getAllQuestionGroupsByAuditIdArray($id),
    );
return print_r(json_encode($this->response));

在PHP中,我们可以更新响应以返回非关联数组或组,如

$QuestionGroups = array();
foreach ($this->getAllQuestionGroupsByAuditId($id) AS $key => $group) {
    $QuestionGroups[] = array(
        "id" => $group['id'],
        "name" => $group['name'],
        "questions" => $questions->getQuestionsByGroupIdArray($group['id'])
    );
}

当转换为JSON时,它将以对象数组而不是对象对象的形式返回groups

然后,您可以简单地使用.push()将更多的组附加到groups数组中。

示例fiddle