如何将对象属性作为参数传递?(JavaScript的)

maz*_*aze 29 javascript parameters properties function object

我不确定标题是否适合我想要实现的目标

我将JSON结果映射到数组.因为我需要一遍又一遍地执行此操作,所以我想将代码放入一个函数中.

在下面的例子中,我重复自己.我有属性名为item.data1,item.data2和第二个示例item.something1,item.something2 ...如何将这些属性作为"常规"参数传递给新创建的函数,以便在那里使用它们而不是重复一遍这些地图?新函数应该可用于下面的两个示例以及属性可以具有不同名称的其他情况.

service.getData(function(data) {
    var map = {};
    map = $.map(data, function(item, i) {
        var entry = {};

        entry.key = item.data1;
        entry.value = item.data2;

        return entry;
    });
});

service.getSomething(function(data) {
    var map = {};
    map = $.map(data, function(item, i) {
        var entry = {};

        entry.key = item.something1;
        entry.value = item.something2;

        return entry;
    });
});
Run Code Online (Sandbox Code Playgroud)

Ale*_*yne 46

使用[]字符串动态地从对象中提取属性.

var a = { foo: 123 };
a.foo    // 123
a['foo'] // 123

var str = 'foo';
a[str]   // 123
Run Code Online (Sandbox Code Playgroud)

这意味着我们可以像这样重构你的方法,只需传入你想要读作字符串的属性的名称.

var getKeyValueMap = function(data, keyPropName, valuePropName) {
  return $.map(data, function(item, i) {
    return {
      key:   item[keyPropName],
      value: item[valuePropName]
    }
  });
};

service.getData(function(data) {
  return getKeyValueMap(data, 'data1', 'data2');
});

service.getSomething(function(data) {
  return getKeyValueMap(data, 'something1', 'something2');
});
Run Code Online (Sandbox Code Playgroud)

  • 如果密钥是一两层深怎么办?你如何通过参数传递密钥? (4认同)