我有一个像这样的数组:
[
{
"name": "Name VIC",
"state": "Victoria"
},
{
"name": "Name NSW",
"state": "New South Wales"
}
]
我需要使用state
作为键并已排序从数组中创建一个对象。
{
"New South Wales": [
{
"name": "Name NSW",
"state": "New South Wales"
}
],
"Victoria": [
{
"name": "Name VIC",
"state": "Victoria"
}
],
}
请注意,NSW
状态必须在对象中位于第一位,但它不是数组中的第一项。因此,使用遍历数组创建对象后,结果是Victoria
状态首先出现。我知道我可以用更多代码对结果对象进行排序。但是,有什么方法可以创建对象,而键却可以立即排序? (请在下面检查我的代码)
function () {
let result = {}
array.forEach((item) => {
if (!result[item.state]) {
result[item.state] = []
}
result[item.state].push(item)
})
return result
}
更新 请再次阅读我的问题。我知道有很多方法可以对键进行排序,但这不是我的意思。我希望键在循环中正确排序,而不是在对象创建之后。
答案 0 :(得分:0)
您可以使用Object.fromEntries
创建这样的对象。但是这里要注意的一件事是对象没有排序键。
var data = [
{
"name": "Name VIC",
"state": "Victoria"
},
{
"name": "Name NSW",
"state": "New South Wales"
}
];
var newData = Object.fromEntries(data.map(el => [el.state, el]));
console.log(newData);
答案 1 :(得分:0)
const array = [
{
"name": "Name VIC",
"state": "Victoria"
},
{
"name": "Name NSW",
"state": "New South Wales"
}
];
const states = array => array.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0).reduce((result, state) => { result[state.state] = state; return result; }, {});
console.log(states(array))