首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将对象属性作为参数传递?(JavaScript)

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

Stack Overflow用户
提问于 2012-12-07 17:24:24
回答 5查看 59.2K关注 0票数 33

我不确定这个标题是否适合我正在努力实现的目标

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

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

代码语言:javascript
复制
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;
    });
});
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-07 17:33:06

[]与字符串一起使用可以动态地从对象中提取属性。

代码语言:javascript
复制
var a = { foo: 123 };
a.foo    // 123
a['foo'] // 123

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

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

代码语言:javascript
复制
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');
});
票数 56
EN

Stack Overflow用户

发布于 2012-12-07 17:41:28

这可以使用[]运算符来完成,而不是像in this fiddle ive created just for you :D一样使用.-notation

代码语言:javascript
复制
    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');
票数 3
EN

Stack Overflow用户

发布于 2012-12-07 17:33:52

您需要传递item对象和item-keys到entry-keys的映射。这可以是两个数组、一个元组数组或其他东西,也可以是一个对象。我能想到的最简单的方法是将描述符对象更改为条目本身:

代码语言:javascript
复制
function mapPropertyNames(source, dest) {
    for (var prop in dest)
        dest[prop] = source[dest[prop]];
    return dest;
}

// and use it like this:

var map = $.map(data, function(item, i) {
    return mapPropertyNames(item, {key:"something1", value:"something2"});
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13760186

复制
相关文章

相似问题

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