我有以下功能:
export const functionName = (key) => {
const data = [
{
displayOrder: 0,
key: 'key-name-1',
},
{
displayOrder: 2,
key: 'key-name-2',
},
];
for (let index in data) {
return data[index].displayOrder === 0
? data[index].key
: data[0].key;
}
};
该函数的目的是返回具有最低displayOrder的key
。这有效,但是有更好的方法来实现这个目标吗?
其次,如何根据displayOrder
创建类似版本以重新排序整个数组?
答案 0 :(得分:1)
当您想从数组中提取单个元素时使用的正确方法(并且您无法使用.find
自行识别元素)是使用.reduce
:
const functionName = () => {
const data = [
{
displayOrder: 0,
key: 'key-name-1',
},
{
displayOrder: 2,
key: 'key-name-2',
},
];
const lowestDisplayObj = data.reduce((lowestObjSoFar, currentObj) => {
if (currentObj.displayOrder < lowestObjSoFar.displayOrder) return currentObj;
return lowestObjSoFar;
}, { displayOrder: Infinity, key: null });
return lowestDisplayObj.key;
};
console.log(functionName());
&#13;
请注意,您的functionName
key
的当前参数在您的代码段中未使用,我不确定它的用途。
你也可以使用.sort()并选择数组中的第一个元素,但这比计算成本更高。
答案 1 :(得分:0)
您可以使用数组reduce,并执行以下操作。
const data = [{
displayOrder: 10,
key: 'key-name-10',
},
{
displayOrder: 2,
key: 'key-name-2',
},
{
displayOrder: 1,
key: 'key-name-1 Lowest',
}
];
let a = data.reduce((prev, item) => {
if (!prev) {
return item;
}
return (item.displayOrder < prev.displayOrder) ? item : prev;
});
console.log(a.key);
答案 2 :(得分:0)
const data = [
{
displayOrder: 0,
key: 'key-name-1',
},
{
displayOrder: 2,
key: 'key-name-2',
},
];
const min = Math.min.apply(null, data.map(({displayOrder}) => +displayOrder));
const obj = data.find((obj) => obj.displayOrder == min);
console.log(obj.key);