首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将键及其值作为javascript对象的参数传递

如何将键及其值作为javascript对象的参数传递
EN

Stack Overflow用户
提问于 2018-10-25 14:33:32
回答 2查看 139关注 0票数 0

为了缩短代码的长度,我决定创建javascript函数来初始化select2插件。现在,我正在编写非常长的代码来初始化一个元素。

代码语言:javascript
复制
$("#add_multiple_lr #trips_div .last_added .location_id").select2({
  initSelection: function(element, callback) {
    var elementText = $(element).attr('json-value');
    callback(JSON.parse(elementText));
  },
  minimumInputLength: 2,
  ajax: {
    url: "<?php echo site_url('masters/locations/json_search'); ?>",
    dataType: 'json',
    type: "POST",
    quietMillis: 50,
    data: function (term) {
      return {
        term: term,
        location_type: 'station',
        location_county: ['india', 'bangladesh']
      };
    },
    results: function (data) {
      return {
        results: $.map(data, function (item) {
          return {
            text: item.text,
            id: item.id
          }
        })
      };
    }
  }
});

对于一两个元素来说,编写这段代码是正常的,但是当涉及到10-15个元素时,我在下面开发的代码变得非常混乱和冗长。

代码语言:javascript
复制
function initSelect2(reference, url, additional_data = {}, minimumInputLength = 2)
{
  $(reference).select2({
    initSelection: function(element, callback) {
      var elementText = $(element).attr('json-value');
      callback(JSON.parse(elementText));
    },
    minimumInputLength: minimumInputLength,
    ajax: {
      url: url,
      dataType: 'json',
      type: "POST",
      quietMillis: 50,
      data: function (term) {
        return {
          term: term,
          additional_data
        };
      },
      results: function (data) {
        return {
          results: $.map(data, function (item) {
            return {
              text: item.text,
              id: item.id
            }
          })
        };
      }
    }
  });
}

并称其为

代码语言:javascript
复制
initSelect2(
  "#add_multiple_lr #lr_party, #add_multiple_lr #lr_payable_party",
  "<?php echo site_url('masters/locations/json_search'); ?>",
  {location_type: 'station', location_country: ['india', 'bangladesh']}
);

我只想返回additional_data (一个参数)的键及其属性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-25 14:42:44

为此,可以使用spread语法:

代码语言:javascript
复制
return {
    term,
    ...additional_data
};

对于较旧的浏览器,您可以依赖jQuery extend方法(就像您似乎使用jQuery的那样):

代码语言:javascript
复制
return $.extend({ term: term }, additional_data);
票数 1
EN

Stack Overflow用户

发布于 2018-10-25 14:44:23

当您的环境支持最新的ECMAScript时,可以使用对象扩展语法:

代码语言:javascript
复制
return {
  term: term,
  ...additional_data
};

否则,可以使用Object.assign():

代码语言:javascript
复制
return Object.assign({term: term}, additional_data);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52991874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档