将对象数组及其属性转换为数组

时间:2016-07-07 14:24:21

标签: javascript arrays object underscore.js

我尝试了几种地图功能但找不到合适的方法来获得我想要的东西。情况就是这样:

Object {Results:Array[3]}
   Results:Array[3]
       [0-2]
            0:Object
                   id=null     
                   name: "Rick"
                   upper:"0.67"
            1:Object
                   id="00379321"     
                   name:null
                   upper:"0.46"
            2:Object
                   id="00323113"      
                   name:null
                   upper:null

我希望我的最终结果看起来像这样。我希望删除所有空值,并将所有条目绑定在对象中。

var finalResult = ["Rick","0.67","00379321","0.46","00323113"];

如何实现这一结果?

4 个答案:

答案 0 :(得分:3)

_.chain(a)
.map(function(x) {return _.values(x)})
.flatten()
.filter(function(x) {return x != null;})
.value()

答案 1 :(得分:3)

@ andrey代码的小修改(需要lodash.js)

var a = [{id:null, name: "Rick", upper:"0.67"}, {id:"00379321", name:null, upper:"0.46"}, {id: "00323113",name:null, upper:null}]
_(a)
.map(function(x) {return _.values(x)})
.flatten()
.without(null)
.value()

答案 2 :(得分:2)

我建议使用固定数组作为键,因为对象的属性没有顺序且顺序是相关的。

var data = [{ id: null, name: "Rick", upper: "0.67" }, { id: "00379321", name: null, upper: "0.46" }, { id: "00323113", name: null, upper: null }],
    result = [];

data.forEach(function (a) {
    ['id', 'name', 'upper'].forEach(function (k) {
        if (a[k] !== null) {
            result.push(a[k]);
        }
    });
});

console.log(result);

答案 3 :(得分:1)

另一个下划线解决方案,类似于其他下划线解决方案,但使用rejectisNull谓词:

var result = _.chain(data)
    .map(_.values)
    .flatten()
    .reject(_.isNull)
    .value();
相关问题