【问题标题】:Pick values of given properties from object into array从对象中选择给定属性的值到数组中
【发布时间】:2016-11-09 12:08:42
【问题描述】:

我有一个对象:

person = { 
    birth_year: 1970, 
    first_name: "John", 
    last_name: "Doe", 
    occupation: "Doctor", 
    city: "Boston",
    married: true 
}

我有一个按给定顺序排列的键名数组:

keys = ["occupation", "last_name", "city"]

我想得到这个数组:

["Doctor", "Doe", "Boston"]

重要的是,答案应该保证顺序(JavaScript 不保证对象迭代的顺序)。

我认为 lodash/underscore 中可能有一些实用功能可以简单地做到这一点,但无法弄清楚。

【问题讨论】:

    标签: javascript arrays object lodash


    【解决方案1】:

    您可以为此使用Array.prototype.map。 Map 循环遍历一个数组并通过对每个项目应用一个函数来创建一个新数组。当您使用 keys 数组作为起点,并为该键返回 o 中的值时,您将获得一个只有值的新数组。

    当使用“动态”键名时,您使用object[stringKeyName] 表示法来检索值。

    var o = { 
        birth_year: 1970, 
        first_name: "John", 
        last_name: "Doe", 
        occupation: "Doctor", 
        city: "Boston",
        married: true 
    };
    
    var keys = ["occupation", "last_name", "city"];
    
    var result = keys.map(function(k) { return o[k]; });
    
    console.log(result);

    如果适合你的风格,你可以创建一个辅助方法来替换匿名函数:

    var o = { birth_year: 1970, first_name: "John", last_name: "Doe", occupation: "Doctor", city: "Boston", married: true };
    var keys = ["occupation", "last_name", "city"];
    
    var prop = obj => key => obj[key];
    var result = keys.map(prop(o));
    
    console.log(result);

    【讨论】:

    • 我们甚至可以将其简化为var result = keys.map(k => o[k]),但我仍然不喜欢它。
    • 如果是风格问题,您可以将一些东西包装在助手中。看看第二个 sn-p。
    • 如果订单很重要,这个或_.map 函数是要走的路。
    【解决方案2】:

    使用Lodash,您可以使用pickvalues

    var o = {
      birth_year: 1970,
      first_name: "John",
      last_name: "Doe",
      occupation: "Doctor",
      city: "Boston",
      married: true
    }
    var keys = ["occupation", "last_name", "city"];
    
    var result = _.values(_.pick(o, keys));
    console.log(result)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

    【讨论】:

    • 保证订单吗?
    • @Mikhail Batcer 我不确定。
    • @NenadVracar 这就是我问这个“nooby”问题的原因...... :))
    • pick 创建一个对象,values 循环遍历对象的键。对象键未按规范 (stackoverflow.com/a/5525820/3297291) 排序,因此您不能期望 result 在此示例中遵循 keys 的顺序。
    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 2016-11-02
    • 2019-12-03
    • 1970-01-01
    • 2012-01-08
    • 2020-02-10
    • 2021-12-26
    • 2015-10-30
    相关资源
    最近更新 更多