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

时间:2017-09-08 18:47:22

标签: javascript arrays node.js

有关将Javascript对象转换为数组的问题太多了。

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

我想通过一个例子来解释你:

如果我有一个名为person的对象:

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

我想要一个总是如下的数组:

["John", "Doe", 20]

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

回复@KevinB:

enter image description here

4 个答案:

答案 0 :(得分:1)

如果您想保证订单,您需要在保证订单的数据结构中定义该订单,例如列表。

例如,您可以执行以下操作:

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

答案 1 :(得分:0)

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



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

var vals = Object.values(person);
console.log(vals);




答案 2 :(得分:0)

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




答案 3 :(得分:0)

  

这里我举一个例子。但我的实际问题是:我使用node-dbf库从DBF文件获取值,它将每行返回为对象而不是数组。密钥包含一些unicode字符。所以,我希望数组的顺序与DBF列的顺序相同。

所以它实际上并不是关于对象中你的percieved 键的顺序,而是文件中列的顺序。这改变了一切。

偷看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);
});