【问题标题】:Function to turn an array of objects into an array of primitives, by key通过键将对象数组转换为基元数组的函数
【发布时间】:2013-09-04 14:36:07
【问题描述】:

我目前需要一个可以转这个的 JS 函数:

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

进入这个:

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

您可能已经从这个问题的标题中注意到了,我什至不确定这个问题的正确表达方式(英语不是我的母语)。

因此,谷歌搜索很难找到,所以我自己写了;但我觉得有一些本机 JS 函数可以完成这项工作。有吗?

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

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

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

    return result;
}

【问题讨论】:

    标签: javascript arrays object key


    【解决方案1】:

    遍历一组对象并获取每个对象的一个​​键通常称为“采摘”,尽管还有其他名称。在现代 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 是一个问题,那么您的功能已经达到了最佳状态。

    【讨论】:

    • array.map 在我的精确情况下似乎不起作用,我想我确实会使用我的函数。仍然选择(并赞成)您的答案,因为我认为这是我的想法,并且您向我了解了“采摘”一词。谢谢 ! :D
    • 如果您仍在使用没有 Array.map 的 Javascript 引擎,您可以对其进行填充:github.com/kriskowal/es5-shim
    • 谢谢!不,是我使用的数据在某处一定是错误的......但是我查了一下,发现 IE8 没有这个功能,所以我可能确实需要填充它。作为记录,这里有一个简单的实现:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    猜你喜欢
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多