我有一个像这样的数组:
var startArray = [
{value: 2, label: 'label 2'},
{value: 1, label: 'label 1'},
{value: 17, label: 'label 17'},
{value: 15, label: 'label 15'}
];
我想创建这样的对象:
var middleObject = {
2: 'label 2',
1: 'label 1',
17: 'label 17',
15: 'label 15'
};
我使用了代码:
startArray.forEach( function(oneOption) {
middleObject[oneOption.value] = oneOption.label;
});
enter code here
我也尝试使用此代码(具有相同的结果):
for (var oneOption in startArray) {
middleObject[oneOption.value] = oneOption.label;
}
但问题是,当我使用这段代码时,我会像这样获取对象:
var middleWrongObject = {
1: 'label 1',
2: 'label 2',
15: 'label 15',
17: 'label 17'
};
但稍后我应该在循环中使用 middleObject
,其顺序与 firstArray
中的顺序相同。并且middleObject
里面的属性每次都应该是number类型。我们是否有一些方法来设置 middleObject
内部属性的排序(无需设置属性“ordering”并稍后按此字段排序)
感谢您的帮助。
最佳答案
您可以将给定数组拆分为排序键的一部分,并使用对象作为数据的引用。
var startArray = [{ value: 2, label: 'label 2' }, { value: 1, label: 'label 1' }, { value: 17, label: 'label 17' }, { value: 15, label: 'label 15' }],
keys = startArray.map(a => a.value),
object = Object.assign(...startArray.map(a => ({ [a.value]: a.label })));
keys.sort((a, b) => a - b); // keys in asc order
console.log(keys.map(k => object[k])); // access via keys
console.log(object);
关于javascript - 从数组创建对象,像数组内部一样严格排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43909380/