Javascript 如何从每组记录中保留具有最大id的属性值?

Javascript 如何从每组记录中保留具有最大id的属性值?,javascript,Javascript,在my regions数组中,有3条记录的选定属性为true,即14.3,14.2,11.1 我正在尝试将选定属性为true的每个零件的所有较低版本的选定属性设置为false 例如:选择了14.3和14.2,并且14.3的id大于14.2,因此对于part=30,14.2的选定属性应设置为false,因为它是所选14.3和14.2中part=30的较低版本 如果我谈论11.1,更高的版本将是11.1,因为11.2比11.1更高,所以11.1的selected属性将保持为true 预期输出: va

在my regions数组中,有3条记录的选定属性为true,即
14.3,14.2,11.1

我正在尝试将选定属性为true的每个零件的所有较低版本的选定属性设置为false

例如:选择了14.3和14.2,并且14.3的id大于14.2,因此对于part=30,14.2的选定属性应设置为false,因为它是所选14.3和14.2中part=30的较低版本

如果我谈论11.1,更高的版本将是11.1,因为11.2比11.1更高,所以11.1的selected属性将保持为true

预期输出:

var regions = [
                 {
                     "id": 77,
                     "selected": false,
                     "part": 33,
                     "name": "16.1", 
                 },
                {
                    "id": 76,
                    "part": 30,
                    "selected": true,
                    "name": "14.3",
                },
                {
                    "id": 71,
                    "part": 30,
                    "selected": false,
                    "name": "14.2",
                },
                {
                    "id": 70,
                    "part": 31,
                    "selected": false,
                    "name": "15.1",
                },
                {
                     "id": 54,
                     "part": 25,
                     "selected": false,
                     "name": "11.2",
                 }
                 ,
                 {
                     "id": 53,
                     "part": 25,
                     "selected": true,
                     "name": "11.1",
                 }
            ];
因此,对于每个部分,我都不知道如何将max id的选定属性保持为true

var区域=[
{
“id”:77,
“选定”:false,
“部分”:33,
“名称”:“16.1”,
},
{
“id”:76,
“部分”:30,
“选定”:正确,
“名称”:“14.3”,
},
{
“id”:71,
“部分”:30,
“选定”:正确,
“名称”:“14.2”,
},
{
“id”:70,
“部分”:31,
“选定”:false,
“名称”:“15.1”,
},
{
“id”:54,
“部分”:25,
“选定”:false,
“名称”:“11.2”,
}
,
{
“id”:53,
“部分”:25,
“选定”:正确,
“名称”:“11.1”,
}
];
var obj={“id”:70,“part”:31,“selected”:true,“name”:“15.1”};
对于(变量i=0;iconsole.log(regions)
您可以在数组中迭代两次:

var maxes = {};

// keep track of the max value associated with each id
for (var i = 0; i < regions.length; i++) {
    var id = regions[i].part;
    if (typeof maxes[id] === 'undefined')
        maxes[id] = +regions[i].name;
    else maxes[id] = Math.max(maxes[id], +regions[i].name);
}

// set the max to be true and all others to be false
for (var i = 0; i < regions.length; i++) {
    if (+regions[i].name === maxes[regions[i].part])
        regions[i].selected = true;
    else
        regions[i].selected = false;
}
var-maxes={};
//跟踪与每个id关联的最大值
对于(变量i=0;i
您可以使用数组方法,如
reduce
(从
零件
到最大选定
id
)和
forEach
(根据每个区域是否具有最大
id
,更新每个区域的
选定
值)

var区域=[{
“id”:77,
“选定”:false,
“部分”:33,
“名称”:“16.1”,
},
{
“id”:76,
“部分”:30,
“选定”:正确,
“名称”:“14.3”,
},
{
“id”:71,
“部分”:30,
“选定”:正确,
“名称”:“14.2”,
},
{
“id”:70,
“部分”:31,
“选定”:false,
“名称”:“15.1”,
},
{
“id”:54,
“部分”:25,
“选定”:false,
“名称”:“11.2”,
},
{
“id”:53,
“部分”:25,
“选定”:正确,
“名称”:“11.1”,
}
]
var map=regions.reduce(函数(map,e){
如果(e.selected)映射[e.part]=Math.max(映射[e.part]| | 0,e.id)
返回图
}, {})
console.log(映射)
区域。forEach(函数(e){
如果(地图中的e.part)e.selected=e.id==map[e.part]
})

console.log(regions)
您的逻辑确实不正确clear@Weedoze:您能告诉我哪些部分不清楚吗?是否可以优化您的答案以使用单回路?不太清楚。你必须知道每个部分的最大值,直到你到达数组的末尾才能知道。最大值应该是数组,但你已经作为objectNope,它应该是一个对象(因此你可以有命名的键和值)。只是碰巧关键的名字是数字,但它们不一定是数字。感谢你对帮助我所做的努力。非常感谢,请继续这样帮助:)这很有效。非常感谢你对帮助我所做的努力,请继续这样帮助:)