我有一个对象数组,如下所示:
var array = [
{competitor: "X", fruit: "Cherry", size: 10},
{competitor: "X", fruit: "Banana", size: 20},
{competitor: "Y", fruit: "Cherry", size: 5},
{competitor: "Y", fruit: "Banana", size: 25}
]
如何根据尺寸获得最小和独特的水果,无论竞争对手的结果如何:
[
{competitor: "X", fruit: "Banana", size: 20},
{competitor: "Y", fruit: "Cherry", size: 5}
]
答案 0 :(得分:6)
您可以使用Array.reduce
根据水果名称创建哈希值,并在当前项目的size
小于存储的项目size
时覆盖:
const array = [
{competitor: "X", fruit: "Cherry", size: 10},
{competitor: "X", fruit: "Banana", size: 20},
{competitor: "Y", fruit: "Cherry", size: 5},
{competitor: "Y", fruit: "Banana", size: 25}
];
const result = array.reduce((p, c) => {
if (!p[c.fruit] || c.size < p[c.fruit].size) {
p[c.fruit] = c;
}
return p;
}, {});
console.log(result);
// as array
const resultArray = Object.keys(result).map(x => result[x]);
// as an array if Object.values() is available
const resultValues = Object.values(result);
console.log(resultArray)
答案 1 :(得分:1)
var array = [
{competitor: "X", fruit: "Cherry", size: 10},
{competitor: "X", fruit: "Banana", size: 20},
{competitor: "Y", fruit: "Cherry", size: 5},
{competitor: "Y", fruit: "Banana", size: 25}
];
var temp = {};
for (var i = 0; i < array.length; i++) {
var fruit = array[i].fruit;
var size = array[i].size;
if (!temp[fruit] || size < temp[fruit].size) {
temp[fruit] = array[i];
}
}
var result = [];
for (var key in temp) {
result.push(temp[key]);
}
console.log(result);
答案 2 :(得分:0)
您可以使用哈希表和单个循环。
var array = [{ competitor: "X", fruit: "Cherry", size: 10 }, { competitor: "X", fruit: "Banana", size: 20 }, { competitor: "Y", fruit: "Cherry", size: 5 }, { competitor: "Y", fruit: "Banana", size: 25 }],
hash = Object.create(null),
result = [];
array.forEach(function (o) {
if (!(o.fruit in hash)) {
hash[o.fruit] = result.push(o) - 1;
return;
}
if (o.size < result[hash[o.fruit]].size) {
result[hash[o.fruit]] = o;
}
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }