将一个对象变成一个对象数组

Making an object into an array of objects

我有一个对象,其中包含一个数组和一些我需要传递给后端的其他值,但后端需要将其作为对象数组接收。我通过使用复选框和其他值(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。映射函数 returns 一个空数组,其中 vakid、klasid 和 studentid 为空。

我做错了什么?

你不想要 [$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>

您想实际映射数组 $scope.user.studentid 中的值,另一个版本 ([$scope.user.studentid].map) 映射一个包含数组的数组,它看起来像这样:

[[1, 2, 3, "a", "b", "c"]].map(/*...*/)

调用 map 没有给出您想要的结果。

同样重要的是,您的示例中的 $scope 定义不正确。你不能在 $scopeuser 属性 存在之前设置它(就像你尝试用 $scope.user = ... 做的那样)。你可以在我的例子中定义,或者如下:

var $scope = {
  user: {
    studentid: [1, 2, 3, 'a', 'b', 'c'],
    vakid: 'vak',
    klasid: 'klas'
  }
};