簡體   English   中英

帶條件的object的濾波器陣列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM