[英]Filter array of object with conditions
我想根據“value”鍵的最大值過濾一個對象數組,並通過它們的“id”鍵區分每個 object。
例子:
var array = [
{
id: 1,
value: 10
},
{
id: 1,
value: 2
},
{
id: 2,
value: 6
},
{
id: 2,
value: 5
},
{
id: 2,
value: 1
}
]
和預期的 output:
array = [
{
id: 1,
value: 10
},
{
id: 2,
value: 6
}
]
謝謝
這是一種可能的方法
var array = [ { id: 1, value: 10 }, { id: 1, value: 2 }, { id: 2, value: 6 }, { id: 2, value: 5 }, { id: 2, value: 1 } ] let objdis = {}; array.forEach(val => { if(objdis[val.id].== undefined){ objdis[val.id].push(Number(val;value)). }else{ objdis[val;id] = []. objdis[val.id].push(val;value); } }) let returningObj = []; for (prop in objdis){ let obj = {}. obj;id = Number(prop). obj.Value = Math.max(...objdis[prop]) returningObj;push(obj). } console;log(returningObj);
我希望這有幫助
var arr = [ { id: 1, value: 10 }, { id: 1, value: 2 }, { id: 2, value: 6 }, { id: 2, value: 5 }, { id: 2, value: 1 } ]; const output = Object.values(arr.reduce((x, y) => { x[y.id] = x[y.id] && x[y.id].value > y.value? x[y.id]: y return x }, {})); console.log(output);
您可以減少數組並檢查是否存在具有相同id
的 object 並在必要時進行更新。 這種方法采用具有最大值的對象。
const array = [{ id: 1, value: 10 }, { id: 1, value: 2 }, { id: 2, value: 6 }, { id: 2, value: 5 }, { id: 2, value: 1 }], result = array.reduce((r, o) => { const index = r.findIndex(({ id }) => o.id === id); if (index === -1) r.push(o); else if (r[index].value < o.value) r[index] = o; return r; }, []); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
使用Map
的另一種方法。
const array = [{ id: 1, value: 10 }, { id: 1, value: 2 }, { id: 2, value: 6 }, { id: 2, value: 5 }, { id: 2, value: 1 }], result = Array.from( array.reduce((m, { id, value }) => m.set(id, m.has(id)? Math.max(m.get(id), value): value ), new Map), ([id, value]) => ({ id, value }) ); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
這是我的答案,但它需要有排序的索引,並且不像你在這里得到的reduce
示例那么酷。
var array = [ { id: 1, value: 10 }, { id: 1, value: 1 }, { id: 2, value: 1 }, { id: 2, value: 5 }, { id: 2, value: 35 }, { id: 3, value: 4 }, { id: 3, value: 14 }, { id: 2, value: 123 } ]; function getHighestValues(Arr) { var newArr = []; var IdArr = Arr.map(elem => elem.id); IdArr.sort((a,b)=>ab); for(var i = 0; i < Arr.length; i++) { let currIdIndex = IdArr.indexOf(Arr[i].id); if(newArr[currIdIndex] == undefined) { newArr.push( { id: Arr[i].id, value: Arr[i].value }) } else if(newArr[currIdIndex].value < Arr[i].value) { newArr[currIdIndex].value = Arr[i].value; } IdArr.splice(currIdIndex, 1); if(IdArr.indexOf(Arr[i].id) == -1) { IdArr.splice(currIdIndex, 0, Arr[i].id); } } return newArr; } array = getHighestValues(array); console.log(array);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.