用键将对象数组转换为基元数组的函数

时间:2013-09-04 14:36:07

标签: javascript arrays object key

我目前需要一个能够解决这个问题的JS功能:

[
    {
        prop1: 'val1',
        prop2: 'val2'
    },
    {
        prop1: 'val3',
        prop2: 'val4'
    },
    {
        prop1: 'val5',
        prop2: 'val6'
    }
]

进入这个:

['val1', 'val3', 'val5'] // we only took each object's .prop1

正如你可能已经注意到这个问题的标题,我甚至不确定正确的方法(英语不是我的母语)。

因此,Googling很难找到,所以我写了自己的;但我觉得有一些原生JS功能可以完成这项工作。有吗?

(为了记录,这是我写的:)

function doSomethingByKey(objArr, key) {
    var result = [];

    for (i in objArr) {
        if (objArr[i].hasOwnProperty(key)) {
            result.push(objArr[i][key]);
        }
    }

    return result;
}

1 个答案:

答案 0 :(得分:1)

迭代一个对象数组并获取每个对象的一个​​键通常称为“plucking”,尽管还有其他名称。在现代Javascript版本中,这可以通过地图轻松实现:

var arr  = [{ foo : 'bar', baz : 42 }, { foo : ... }, ...],
    foos = arr.map(function (obj) { return obj.foo; });

如果你真的想把它抽象成一个函数:

function pluck(arr, key) {
    return arr.map(function (obj) { return obj[key]; });
}

pluck(arr, 'foo');

如果hasOwnProperty是一个问题,那么你的功能就像它已经达到的那样最佳。