如何根據2個屬性洗掉陣列中的重復物件和原始值
這就是我所做的,但這會回傳原件
const rooms = [
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 189
},
{
room_rate_type_id: 190,
price: 200
}
];
let result = rooms.filter((e, i) => {
return rooms.findIndex((x) => {
return x.room_rate_type_id == e.room_rate_type_id && x.price == e.price;}) == i;
});
console.log(result);
我希望結果只是
{
room_rate_type_id: 202,
price: 189
},
{
room_rate_type_id: 190,
price: 200
}
uj5u.com熱心網友回復:
我假設您希望為每個 room_rate_type_id 找到最便宜的價格,我們可以使用Array.reduce().
如果條目價格低于當前最低值,我們通過回圈每個條目并替換每個速率 id 的值來獲得每個速率型別 id 的最便宜的價格:
const rooms = [ { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 189 }, { room_rate_type_id: 190, price: 200 } ];
const result = Object.values(rooms.reduce((acc, cur) => {
if (!acc[cur.room_rate_type_id] || acc[cur.room_rate_type_id].price > cur.price) acc[cur.room_rate_type_id] = cur;
return acc;
}, {}));
console.log('Result:', result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
在放入結果陣列之前,我們需要檢查它是否已經包含該值。我想rooms.forEach(...)用于這個目的。
const rooms = [
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 189
},
{
room_rate_type_id: 190,
price: 200
}
];
const result = [];
rooms.forEach(item => {
if (arr.findIndex(x => x.room_rate_id === item.room_rate_id && x.price === item.price) < 0) {
arr.push(item);
}
});
console.log(result)
uj5u.com熱心網友回復:
您可以使用 aMap并過濾值。
const
getKey = o => ['room_rate_type_id', 'price'].map(k => o[k]).join('|'),
rooms = [{ room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 189 }, { room_rate_type_id: 190, price: 200 }],
result = [
...rooms
.reduce(
(m, o) => (k => m.set(k, !m.has(k) && o))(getKey(o)),
new Map
)
.values()
]
.filter(Boolean);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
如果您在陣列中搜索重復物件(意味著相同的價格和相同的 room_rate_type_id),我會建議使用 JSON.stringify() 和 JSON.parse() 如下:
const rooms = [
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 189
},
{
room_rate_type_id: 190,
price: 200
}
];
const result = rooms.map(room => JSON.stringify(room)).filter((room, index, arr) => arr.indexOf(room) === index).map(room => JSON.parse(room))
console.log(result)
uj5u.com熱心網友回復:
這是另一個答案的長形式。首先,將串列映射到這些費率的費率型別和可用價格。然后,將每種費率型別與可用的最低價格相關聯。
const rooms = [
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 189
},
{
room_rate_type_id: 190,
price: 200
}
];
let options = {};
for (const entry of rooms) {
options[entry.room_rate_type_id] ||= [];
options[entry.room_rate_type_id].push(entry.price);
}
console.log(options);
for (const rate_type in options) {
const price = Math.min(...options[rate_type]);
options[rate_type] = price;
}
console.log(options);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360019.html
標籤:javascript
上一篇:哪個更快?修剪()或正則運算式?
