按子属性排序对象

时间:2017-10-16 09:50:58

标签: javascript angular

在我的Angular4应用中,我希望通过子键(在本例中为obj)对对象(order)进行排序,如下所示:

var obj = {
    signal_a : {
        order : 2,
        signals : []
    },
    signal_b : {
        order : 3,
        signals : []
    },
    signal_c : {
        order : 1,
        signals : []
    }
}

目前显示:

1. signal_a
2. signal_b
3. signal_c

通缉结果:

1. signal_c
2. signal_a
3. signal_b

1 个答案:

答案 0 :(得分:0)

您可以使用Object.keys获取对象属性数组并通过查看其order对其进行排序,并根据此新订单重新创建新对象来实现此目的。

警告 正如这里解释的那样:Does JavaScript Guarantee Object Property Order? JS无法保证对象属性的顺序。您必须将对象转换为数组。或者使用地图。



var obj = {
    signal_a : {
        order : 2,
        signals : []
    },
    signal_b : {
        order : 3,
        signals : []
    },
    signal_c : {
        order : 1,
        signals : []
    }
};

var orderedObj = {};
Object.keys(obj).sort((a,b) => obj[a].order > obj[b].order ? 1 : -1).forEach(prop => orderedObj[prop] = obj[prop]);
console.log(orderedObj);




对象数组



var obj = {
    signal_a : {
        order : 2,
        signals : []
    },
    signal_b : {
        order : 3,
        signals : []
    },
    signal_c : {
        order : 1,
        signals : []
    }
};

var objToArray = Object.keys(obj).sort((a,b) => obj[a].order > obj[b].order ? 1 : -1).map(key => {
  return {
  "key":key,
  "value":obj[key]
  };
});

console.log(objToArray);