【问题标题】:javascript object get array of values from array of keysjavascript对象从键数组中获取值数组
【发布时间】:2016-07-28 19:56:49
【问题描述】:

我有一个键数组:var keys = ["key1","key2","key3"] 和一个对象数组:

var objArr= [
    {"key0":1,"key1":2,"key2":3,"key3":4},
    {"key0":5,"key1":6,"key2":7,"key3":8}
]

我希望能够根据键数组从对象数组中获取值。例如,这个的输出是valueArr = [[2,3,4],[6,7,8]]

我尝试了以下方法:

var result = objArr.map(function(a) {
    for (var i=0;i<keys.length;i++){
        return a[keys[i]];
    };
})

但这会返回 [2,6] 因为它只是返回它得到的第一个值。我不知道如何解决它,所以感谢任何帮助,谢谢!

【问题讨论】:

    标签: javascript key


    【解决方案1】:

    value推入数组并从Array#map返回array

    var keys = ["key1", "key2", "key3"];
    var objArr = [{
      "key0": 1,
      "key1": 2,
      "key2": 3,
      "key3": 4
    }, {
      "key0": 5,
      "key1": 6,
      "key2": 7,
      "key3": 8
    }];
    
    var result = objArr.map(function(a) {
      var arr = [];
      for (var i = 0; i < keys.length; i++) {
        arr.push(a[keys[i]]);
      };
      return arr;
    });
    console.log(result);

    或者在Array#map中使用Array#map

    var keys = ["key1", "key2", "key3"];
    var objArr = [{
      "key0": 1,
      "key1": 2,
      "key2": 3,
      "key3": 4
    }, {
      "key0": 5,
      "key1": 6,
      "key2": 7,
      "key3": 8
    }];
    
    var result = objArr.map(function(a) {
      return keys.map(function(key) {
        return a[key];
      });
    });
    console.log(result);

    【讨论】:

    • 同样的事情,你打败了我
    • @ScottSelby 你做了... ;)
    【解决方案2】:

    不要太早return,循环只经过第一项:

    var result = objArr.map(function(a) {
        var resp = [];
        for (var i=0;i<keys.length;i++){
            resp.push(a[keys[i]]);            
        };
        return resp;
    })
    

    【讨论】:

      【解决方案3】:

      作为替代方法,您可以使用Object.values() 函数,正如here 所建议的那样。示例:

      var objArr= [
          {"key0":1,"key1":2,"key2":3,"key3":4},
          {"key0":5,"key1":6,"key2":7,"key3":8}
      ];
      
      for(var i in objArr){
          objArr[i] = Object.values(objArr[i]);
      }
      

      目前 Internet Explorer、Opera 或 Safari 不支持此功能

      【讨论】:

        【解决方案4】:

        你可以使用嵌套的Array#map

        var keys = ["key1", "key2", "key3"],
            objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }],
            result = objArr.map(function (a) {
                return keys.map(function (k) {
                    return a[k];
                });
            });
        
        console.log(result);

        ES6

        var keys = ["key1", "key2", "key3"],
            objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }],
            result = objArr.map(a => keys.map(k => a[k]));
        
        console.log(result);

        【讨论】:

        • 真的很喜欢 ES6 变种 ;) +1
        【解决方案5】:

        您需要将值推送到数组中,return 将立即中断执行并返回该值。

        试试这个:

        var result = objArr.map(function(a) {
            var res = [];
            for (var i=0;i<keys.length;i++){
                res.push(a[keys[i]]);
            };
            return res;
        })
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-22
          相关资源
          最近更新 更多