从数组中创建具有严格排序的对象,如内部数组

时间:2017-05-11 07:43:05

标签: javascript arrays object

我有一个这样的数组:

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内的属性都应该是数字类型。我们是否有一些方法可以在middleObject内设置属性的排序(没有set属性"排序"稍后按此字段排序) 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以在给定排序键的部分中拆分给定数组,并使用对象作为数据的引用。

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