【问题标题】:Convert array of objects and their properties to array将对象数组及其属性转换为数组
【发布时间】:2016-07-07 14:24:20
【问题描述】:

我尝试了几个地图功能,但找不到合适的方法来获得我想要的东西。情况如下:

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"];

我怎样才能达到这个结果?

【问题讨论】:

    标签: javascript arrays object underscore.js


    【解决方案1】:
    _.chain(a)
    .map(function(x) {return _.values(x)})
    .flatten()
    .filter(function(x) {return x != null;})
    .value()
    

    【讨论】:

    • 请注意,示例代码中的“null”值实际上并不是null,而是一个字符串。此外,通常最好提供代码说明,尤其是对不熟悉该库的人。
    • @MikeMcCaughan 对于不熟悉图书馆的人,我总是建议先阅读文档。
    • 好的,但是看看How to Answer,具体来说简洁是可以接受的,但更全面的解释更好。 显然,你想提供多大的帮助取决于你,但是由于是代码转储,这可能最终会出现在低质量审查队列中。
    • @Andrey- 当我执行 console.log(a); 时,这仍然在最终输出中显示空值;我也没有看到任何错误。我做错什么了吗?
    • @Patrick 我不知道你到底有什么空值。 JS 中的普通 null 值本身就是一个值,但在您的示例中,您将“null”作为字符串。相应地调整我的代码(第 4 行)
    【解决方案2】:

    @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()
    

    【讨论】:

    • 我很抱歉。控制台中的输入显示与我之前提到的 wat 有点不同。你能看看,让我知道吗
    • 我更新了我的答案。我在数组中使用了不同的数据。现在它包含相同的数据,结果是相同的
    【解决方案3】:

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

    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);

    【讨论】:

    • 它给了我一个错误,说明 data.forEach 不是一个函数
    • 你使用哪个用户代理?
    • 用户代理没有找到你
    • 你用什么浏览器?
    • 它适用于 windows 的 chrome 51.0.2704.106 m。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 1970-01-01
      • 2019-06-05
      • 2019-02-10
      • 2022-12-08
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多