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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (132)

我正在将JSON结果映射到一个数组。因为我需要一遍又一遍地做这件事,所以我想把代码放在一个函数中。

在下面的例子中,我重复自己的话。我有一些名为item.data 1,item.data 2的属性,在第二个例子中有item.thing 1,item.thing 2...。如何将这些属性作为“通用”参数传递给新创建的函数,以便在那里使用它们,而不重复返回这些映射?新函数应该可以用于下面两个示例以及属性可能具有不同名称的其他情况。

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;
    });
});
提问于
用户回答回答于

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

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

var str = 'foo';
a[str]   // 123

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

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');
});
用户回答回答于

这可以使用[]运算符,而不是.

    var data = [{
        data1: 'foo',
        data2: 'bar',
        something1: 'sparky',
        something2: 'arf arf!'},
    {
        data1: 'My name is',
        data2: 'What?',
        something1: 'my name is',
        something2: 'Who?!'}
    ];

    function test(data, prop) {
        var d_length = data.length;
        for (var i = 0; i < d_length; i++) {
            alert(data[i][prop]);
        }
    }

    test(data, 'data1');

扫码关注云+社区

领取腾讯云代金券