代码之家  ›  专栏  ›  技术社区  ›  Vishal

将Javascript对象转换为数组(顺序很重要)[关闭]

  •  -1
  • Vishal  · 技术社区  · 7 年前

    但我找不到任何将Javascript对象转换为具有保证顺序的数组的示例。

    我想用一个例子来解释一下:

    如果我有一个叫做“人像”的对象:

    var person = {
        f_name: "John",
        l_name: "Doe",
        age: 20
    }
    

    ["John", "Doe", 20]
    

    我的意思是数组中的值应该始终与对象的顺序相同。

    回复@KevinB:

    enter image description here

    4 回复  |  直到 7 年前
        1
  •  1
  •   Stan Liu    7 年前

    如果要保证顺序,需要在保证顺序的数据结构(如列表)中定义该顺序。

    例如,您可以这样做:

    let person = {
        f_name: "John",
        l_name: "Doe",
        age: 20
    }
    let orderedKeys = ["f_name", "l_name", "age"];
    let personArray = orderedKeys.map(function (key) {
        return person[key];
    });
    
        2
  •  0
  •   BenM    7 年前

    假设属性总是可枚举的,您可以使用 Object.values()

    var person = {
        f_name: "John",
        l_name: "Doe",
        age: 20
    }
    
    var vals = Object.values(person);
    console.log(vals);
        3
  •  0
  •   marvel308    7 年前

    javascript对象没有顺序,您必须用以下方式定义它

    var person = {
        f_name: "John",
        l_name: "Doe",
        age: 20
    }
    
    var defined_order = ['f_name', 'l_name', 'age'];
    
    let result = [];
    for(let prop of defined_order){
        result.push(person[prop]);
    }
    
    console.log(result);
        4
  •  0
  •   Thomas    7 年前

    所以这实际上不是关于 你的感知

    窥视 the lib you're using ,这应该做到:

    var columns;
    parser.on('header', function(header) {
        columns = header.fields.map(field => field.name);
        console.log("columns", columns);
    });
    
    parser.on('record', function(record) {
        var row = columns.map(key => record[key]);
        console.log("row", row);
    });
    

    parser.on('record', function(record) {
        var row = this.header.fields.map(field => record[field.name]);
        console.log("row", row);
    });