我有一个对象数组(产品列表),并且正在对其执行排序逻辑。为了使它成为事实的唯一来源,我制作了一个id产品图,看起来像这样:
const prodsMap = {
1 : {
id : 1,
name : 'abc',
price : 4
},
2 : {
id : 2,
name : 'aac',
price : 3
}
}
现在为了对产品进行分类,我正在这样做:
function sortString(data, propName) {
return data.sort((obj1, obj2) => {
const val1 = obj1[propName]
const val2 = obj2[propName]
if (val1 < val2) {
return -1
}
if (val1 > val2) {
return 1
}
return 0
})
}
像这样调用函数:
const prods = sortString(Object.values(prodsMap), 'name')
这里一切都很好,排序的结果将是一个对象数组,以便获得我正在使用map
函数的id。
现在的问题是,我必须迭代三次(第一次获取对象值,第二次进行排序,第三次来映射ID),我想知道是否有更好的方法在对数组进行排序时仅获取ID
答案 0 :(得分:3)
您可以对移交对象的键进行排序,以获得id
的数组。
如果需要对象的ìd
属性,则可以使用id
属性映射外部对象的值。
const prodsMap = {
1 : {
id : 1,
name : 'abc',
price : 4
},
2 : {
id : 2,
name : 'aac',
price : 3
}
}
function sortString(data, propName) {
return Object.keys(data).sort((a, b) => {
const val1 = data[a][propName];
const val2 = data[b][propName];
if (val1 < val2) {
return -1;
}
if (val1 > val2) {
return 1;
}
return 0;
});
}
const prods = sortString(prodsMap, 'name');
console.log(prods);