【问题标题】:Returning only certain properties from an array of objects in Javascript [duplicate]仅从Javascript中的对象数组返回某些属性[重复]
【发布时间】:2014-08-17 21:21:03
【问题描述】:

如果我有这样的对象

var object = function(key,text)
{
    this.key = key;
    this.text = text;
}

并创建这些对象的数组

var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');

有没有一种方法可以只检索数组中所有对象的一个​​属性?例如:

var keyArray = objArray["key"]; 

上面的例子没有返回 set keyArray 到任何东西,但我希望它会被设置成这样:

keyArray = [
    'key1',
    'key2',
    'key3']

有谁知道不遍历 objArray 并手动将每个键属性复制到键数组的方法?

【问题讨论】:

    标签: javascript arrays javascript-objects


    【解决方案1】:

    这可以通过Array.prototype.map() 函数轻松完成:

    var keyArray = objArray.map(function(item) { return item["key"]; });
    

    如果您要经常这样做,您可以编写一个抽象出地图的函数:

    function pluck(array, key) {
      return array.map(function(item) { return item[key]; });
    }
    

    事实上,Underscore 库有一个名为 pluck 的内置函数,它正是这样做的。

    【讨论】:

    • IE 8 及以下不支持map
    • 上面链接的 MDN 文档包括 IE8 及以下版本的 polyfill。
    • function pluck(obj){return obj[this]} 允许 r.map(pluck,"key")
    • @dandavis:同意,组合得更好(例如,您可以调用 r.filter(pluck, "key") 来查找具有给定键的项目)。我的版本只是近似于 Underscore 的 _.pluck 所做的。
    • 有时我想做一些类似的事情(只保留 JavaScript 对象中的某些属性):stackoverflow.com/a/67591318/470749
    【解决方案2】:
    var object = function(key,text) {
        this.key = key;
        this.text = text;
    }
    
    var objArray = [];
    objArray[0] = new object('key1','blank');
    objArray[1] = new object('key2','exampletext');
    objArray[2] = new object('key3','moretext');
    
    var keys = objArray.map(function(o,i) {
      return o.key;
    });
    
    console.log(keys); // ["key1", "key2", "key3"]
    

    JS Bin 示例

    http://jsbin.com/vamey/1/edit

    请注意,旧版浏览器可能不支持map,但您可以使用for 循环轻松做到这一点:

    var keys = [];
    
    for (var i = 0; i < objArray.length; i++) {
      keys.push(objArray[i].key);
    }
    

    JS Bin 示例

    http://jsbin.com/redis/1/edit

    【讨论】:

      【解决方案3】:

      你会想做这样的事情:

      objArray.map(function (obj) { return obj.key; });
      

      这是一个 JSFiddle 演示:http://jsfiddle.net/Q7Cb3/


      如果需要旧版浏览器支持,可以使用自己的方法:

      JSFiddle 演示:http://jsfiddle.net/Q7Cb3/1/

      function map (arr, func) {
          var i = arr.length;
          arr = arr.slice();
          while (i--) arr[i] = func(arr[i]);
          return arr;
      }
      

      【讨论】:

      • 注意旧版浏览器可能不支持map
      【解决方案4】:

      something 必须遍历数组的元素。你可以使用.map() 让它看起来不错:

      var keys = objArray.map(function(o) { return o.key; });
      

      您可以创建一个函数来生成一个检索特定键的函数:

      function plucker(prop) {
        return function(o) {
          return o[prop];
        };
      }
      

      然后:

      var keys = objArray.map(plucker("key"));
      

      【讨论】:

        【解决方案5】:

        真正的“objArray”是一个里面有3个对象的数组,如果你想要键列表,你可以试试这个:

        var keys = [];
        for(a in objArray) {
            keys.push(objArray[a].key);
        }
        

        你有 in var 键,三个键。

        希望对您有所帮助! :)

        【讨论】:

        • 在 JavaScript 中使用 for ... in 遍历数组是不好的做法。
        • for(var a = 0; a
        猜你喜欢
        • 1970-01-01
        • 2014-04-07
        • 2023-01-27
        • 1970-01-01
        • 2019-06-22
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        相关资源
        最近更新 更多