我有一个对象,它包含一个数组和一些其他值,我需要传递给后端,但后端需要将它作为一个对象数组接收。我通过单击一个字段使用复选框和其他值(docentid,vakid,klasid)来填充数组($ scope.student)。
包含数组和值的对象:
$scope.user = {
studentid: [$scope.student],
vakid: '',
klasid: ''
};
映射功能:
var dataToSend = [$scope.user.studentid].map(function(s) {
return {
vakid: $scope.user.vakid, klasid: $scope.user.klasid, studentid: s
};
});
现在,当我记录用户时,我看到:
Object {studentid: Array[5], //Amount of results checked
vakid: "Alfreds Futterkiste",
klasid: "Berlin"}
我想将它变成一个包含多个对象的数组,因此每个对象都将具有数组的唯一值,即vakid和klasid。映射函数返回一个空数组,其中vakid,klasid和studentid为空。
我做错了什么?
答案 0 :(得分:2)
您不想要[$scope.user.studentid].map
,而是$scope.user.studentid.map
。
var $scope = {};
$scope.user = {
studentid: [1, 2, 3, 'a', 'b', 'c'],
vakid: 'vak',
klasid: 'klas'
};
var dataToSend = $scope.user.studentid.map(function(s) {
return {
vakid: $scope.user.vakid,
klasid: $scope.user.klasid,
studentid: s
};
});
d = document.getElementById('result');
console.log(d)
d.innerHTML = JSON.stringify(dataToSend);

<div id="result"></div>
&#13;
您希望实际映射数组$scope.user.studentid
中的值,另一个版本([$scope.user.studentid].map
)映射到包装数组的数组,它看起来像这样:
[[1, 2, 3, "a", "b", "c"]].map(/*...*/)
致电map
并未提供您的预期结果。
同样相关,在您的示例中未正确定义$ scope。您不能在user
存在之前设置$scope
属性(当您尝试使用$scope.user = ...
时。您可以在我的示例中定义,或者如下所示:
var $scope = {
user: {
studentid: [1, 2, 3, 'a', 'b', 'c'],
vakid: 'vak',
klasid: 'klas'
}
};