将对象转换为对象数组

时间:2015-11-30 09:37:49

标签: javascript map-function

我有一个对象,它包含一个数组和一些其他值,我需要传递给后端,但后端需要将它作为一个对象数组接收。我通过单击一个字段使用复选框和其他值(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为空。

我做错了什么?

1 个答案:

答案 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;
&#13;
&#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'
  }
};