JS:将参数格式从哈希改为数组

时间:2017-06-28 04:18:20

标签: javascript

我有这个JS,我在Ajax上有$(document).ready(function() { editor = new $.fn.dataTable.Editor( { table: "#user_groups_table", template: '#user_groups_form', display: "details", idSrc: "id", ajax: { create: { type: 'POST', url: '/strongbolt/user_groups', } }, fields: [ { name: "name" }, { name: "description" }, { type: "checkbox", name: "users[].id", optionsPair: { label: 'name', value: 'id' } }, { type: "checkbox", name: "roles[].id", optionsPair: { label: 'name', value: 'id' } } ] } ); editor.on( 'preSubmit', function ( e, data, action ) { if ( action === 'create' ) { data.strongbolt_user_group = { "name": data.data[0].name, "description": data.data[0].description, "user_ids": data.data[0].users, "role_ids": data.data[0].roles }; delete data.data; } } ); 个动作:

editor.on( 'preSubmit', function ( e, data, action ) {

data开头的最后一部分在传递给服务器之前基本上修改了{ "strongbolt_user_group"=>{ "name"=>"Some test group", "description"=>"Some test description", "user_ids"=>{"0"=>{"id"=>"3"}, "1"=>{"id"=>"2"}, "2"=>{"id"=>"5"}}, "role_ids"=>{"0"=>{"id"=>"1"}, "1"=>{"id"=>"2"}} } }

此刻我在终端上找到了这样的参数:

{
  "strongbolt_user_group"=>{
    "name"=>"Some test group",
    "description"=>"Some test description",
    "user_ids"=>["3", "2", "5"], 
    "role_ids"=>["1", "2"]
  }
}

然而我需要它像这样:

user_ids

基本上我需要role_ids (function () { 'use strict'; angular .module('timeOff') .controller('TimeOffController', TimeOffController); TimeOffController.$inject = ['$scope']; function TimeOffController($scope) { 作为数组。 我如何在我的JS中修改它?谢谢!

1 个答案:

答案 0 :(得分:1)

您必须将对象的数组(或类数组对象)映射到其ID数组:

"user_ids": Array.prototype.map.call(data.data[0].users, function(o) { return o.id; }),

如果您确定data.data[0].users是一个数组,那么只需使用不map的{​​{1}}:

call
在ES 6的箭头功能中

甚至更短:

"user_ids": data.data[0].users.map(function(o) { return o.id; }),

注意:同样适用于"user_ids": data.data[0].users.map(o => o.id),