gpt4 book ai didi

基于对象属性区分数组的Javascript最干净的方法

转载 作者:行者123 更新时间:2023-11-30 13:57:03 25 4
gpt4 key购买 nike

所以我有一个状态数组,我想根据元素属性 ProductOrderStatusTypeID 获取不同的值。我有一个实现,但我想要最简洁的方法。

我的 list :

[{
StatusID : 1,
Name : "Open",
ProductOrderStatusType : 'Initial'
ProductOrderStatusTypeID : 1
},{
StatusID : 3,
Name : "Closed",
ProductOrderStatusType : 'Final'
ProductOrderStatusTypeID : 2
},
{
StatusID : 3,
Name : "Pending",
ProductOrderStatusType : 'Initial'
ProductOrderStatusTypeID : 1
}]

预期输出:

[{
ProductOrderStatusType : 'Initial',
ProductOrderStatusTypeID : 1
},{
ProductOrderStatusType : 'Final',
ProductOrderStatusTypeID : 2
}]

我的代码:

function getDistinctProductOrderStatusType(statuses) {
return statuses.reduce(function (result, status) {
var existingStatus = result.filter(function (res) {
return res.ProductOrderStatusTypeID === status.ProductOrderStatusTypeID;
})[0];
if (!existingStatus) {
result.push({
ProductOrderStatusTypeID: status.ProductOrderStatusTypeID,
ProductOrderStatusType: status.ProductOrderStatusType
});
}
return result;
}, []);
}

最佳答案

const stat = [{
StatusID: 1,
Name: "Open",
type: 'Initial', // !!! I renamed properties for simplicity sake
typeID: 1
}, {
StatusID: 3,
Name: "Closed",
type: 'Final',
typeID: 2
}, {
StatusID: 3,
Name: "Pending",
type: 'Initial',
typeID: 1
}
];

const distinctStat = arr => arr.reduce((a, {type, typeID}) =>
a.some(ob => ob.typeID === typeID) ? a : a.concat({type, typeID})
, []);

console.log( distinctStat(stat) );

如果您发现命名您感兴趣的属性更容易(例如:StatusIDName)比你可以去休息的元素:

const distinctStat = arr => arr.reduce((a, {StatusID, Name, ...r}) =>
a.some(ob => ob.typeID === r.typeID) ? a : a.concat(r)
, []);

(与上面相同的输出)

信息:

虽然我们可以,但在上面的代码中Array.prototype.some()使用而不是 Array.prototype.find()因为我们不需要返回整个对象,而只需返回一个 bool 值(尽快)。

关于基于对象属性区分数组的Javascript最干净的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57064769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com