gpt4 book ai didi

javascript - 如何从 JavaScript 中的对象数组及其索引中获取最小值?

转载 作者:行者123 更新时间:2023-11-28 18:46:14 25 4
gpt4 key购买 nike

我有一个像这样的 JavaScript 对象数组:

var items = [
{
make: 'Lenovo',
config1: {
price: 388,
isCheapest: false,
},
config2: {
price: 198,
isCheapest: false,
}
config3: {
price: 176,
isCheapest: false
}
},
{
make: 'Dell',
config1: {
price: 398,
isCheapest: false,
},
config2: {
price: 336,
isCheapest: false,
}
config3: {
price: null,
isCheapest: false
}
},
{
make: 'HP',
config1: {
price: 264,
isCheapest: false,
},
config2: {
price: 198,
isCheapest: false,
}
config3: {
price: 136,
isCheapest: false
}
}
];

如果上面的每个配置的 isCheapest 键是最低值,我需要将其设置为 true。例如,对于 config3,HP 将是最便宜的,因此我必须将 HP 的 isCheapest 设置为 true,而对于 config2,Lenovo 和 HP 都是最便宜的,因此我必须将它们的 设置为 true isCheapest 键为 true。

另请注意,某些商品的价格值也可能为空。在应用程序中,这意味着该项目在该特定配置中不可用。因此,我们不能将价格设置为 null 的商品视为最便宜的。

我尝试为每种配置类型创建 3 个不同的循环,但它变得非常复杂,有时甚至不准确。我怎样才能做到这一点?

最佳答案

一个对项目和键进行一些迭代的提案,一个价格最便宜的对象和一些更多的迭代。

编辑:最后对对象 obj 进行更小的迭代,性能更好。

var items = [{ make: 'Lenovo', config1: { price: 388, isCheapest: false, }, config2: { price: 198, isCheapest: false, }, config3: { price: 176, isCheapest: false } }, { make: 'Dell', config1: { price: 398, isCheapest: false, }, config2: { price: 336, isCheapest: false, }, config3: { price: null, isCheapest: false } }, { make: 'HP', config1: { price: 264, isCheapest: false, }, config2: { price: 198, isCheapest: false, }, config3: { price: 136, isCheapest: false } }];
void function (data) {
var obj = {};
items.forEach(function (a) {
Object.keys(a).forEach(function (k) {
if (typeof a[k] === 'object' && 'price' in a[k] && a[k].price !== null) {
if (!(k in obj) || a[k].price < obj[k].price) {
obj[k] = { price: a[k].price, items: [a[k]] };
return;
}
if (a[k].price === obj[k].price) {
obj[k].items.push(a[k]);
}
}
});
});
Object.keys(obj).forEach(function (k) {
obj[k].items.forEach(function (a) {
a.isCheapest = true;
});
});
}(items);
document.write('<pre>' + JSON.stringify(items, 0, 4) + '</pre>');

关于javascript - 如何从 JavaScript 中的对象数组及其索引中获取最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35299233/

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