Javascript 如何从每组记录中保留具有最大id的属性值?
在my regions数组中,有3条记录的选定属性为true,即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
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;i console.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,它应该是一个对象(因此你可以有命名的键和值)。只是碰巧关键的名字是数字,但它们不一定是数字。感谢你对帮助我所做的努力。非常感谢,请继续这样帮助:)这很有效。非常感谢你对帮助我所做的努力,请继续这样帮助:)