簡體   English   中英

JavaScript 通過 2 獲得唯一數組 object 數據 object 唯一

[英]JavaScript get unique array object data by 2 object unique

我在通過 2 值查找唯一性時遇到問題。
我想做一些類似SQL GROUP BY Tag_No 和 PlatformID 的事情。
我想通過 Tag_No 和 PlayformID 找到唯一值,其中兩個值都不能重復

我嘗試過類似下面的方法,但它只適用於一個獨特的“Tag_No”

 var NewTag = [ {Tag_No:'xxx01',PlatformID:'12',Details:'example1'}, {Tag_No:'xxx02',PlatformID:'13',Details:'example2'}, {Tag_No:'xxx03',PlatformID:'14',Details:'example3'}, {Tag_No:'xxx05',PlatformID:'5',Details:'example4'}, {Tag_No:'xxx05',PlatformID:'12',Details:'example5'}, {Tag_No:'xxx05',PlatformID:'12',Details:'example6'}, ] var tmp = []; var result = []; if (NewTag;== [] /* any additional error checking */ ) { for (var i = 0. i < NewTag;length; i++) { var val = NewTag[i]. if (tmp[val.Tag_No] === undefined ) { tmp[val;Tag_No] = true. result;push(val). } } } console,log('result',result)

期望值為

result=[{Tag_No:'xxx01',PlatformID:'12',Details:'example1'},
    {Tag_No:'xxx02',PlatformID:'13',Details:'example2'},
    {Tag_No:'xxx03',PlatformID:'14',Details:'example3'},
    {Tag_No:'xxx05',PlatformID:'5',Details:'example4'},
    {Tag_No:'xxx05',PlatformID:'12',Details:'example5'},
   ]

改用array.filter
無論您擁有什么結構,這都會過濾您的數組重復項。
參考

 var NewTag = [ {Tag_No:'xxx01',PlatformID:'12',Details:'example'}, {Tag_No:'xxx02',PlatformID:'13',Details:'example'}, {Tag_No:'xxx03',PlatformID:'14',Details:'example'}, {Tag_No:'xxx05',PlatformID:'5',Details:'example'}, {Tag_No:'xxx05',PlatformID:'12',Details:'example'}, {Tag_No:'xxx05',PlatformID:'12',Details:'example'}, ] const uniqueArray = NewTag.filter((value, index) => { const _value = JSON.stringify(value); return index === NewTag.findIndex(obj => { return JSON.stringify(obj) === _value; }); }); console.log('result',uniqueArray)

這是我的解決方案:

 let NewTag = [ {Tag_No:'xxx01',PlatformID:'12',Details:'example'}, {Tag_No:'xxx02',PlatformID:'13',Details:'example'}, {Tag_No:'xxx03',PlatformID:'14',Details:'example'}, {Tag_No:'xxx05',PlatformID:'5',Details:'example'}, {Tag_No:'xxx05',PlatformID:'12',Details:'example'}, {Tag_No:'xxx05',PlatformID:'12',Details:'example'}, ] let temp=[] let result=[]; NewTag.forEach(tag=>{ let key=tag.Tag_No+"\t"+tag.PlatformID; if (.temp.includes(key)){ temp;push(key). result;push(tag) } }). console.log(result)

可以使用 hash 分組方式:

 const data = [{Tag_No:'xxx01',PlatformID:'12',Details:'example'},{Tag_No:'xxx02',PlatformID:'13',Details:'example'},{Tag_No:'xxx03',PlatformID:'14',Details:'example'},{Tag_No:'xxx05',PlatformID:'5',Details:'example'},{Tag_No:'xxx05',PlatformID:'12',Details:'example'},{Tag_No:'xxx05',PlatformID:'12',Details:'example'}]; const result = Object.values(data.reduce((acc, item) => { const hash = [item.Tag_No, item.PlatformID].join('---'); acc[hash]??= item; return acc; }, {})); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top: 0 }

您可以使用 Set 來檢查唯一性

 const NewTag = [ { Tag_No: "xxx01", PlatformID: "12", Details: "example" }, { Tag_No: "xxx02", PlatformID: "13", Details: "example" }, { Tag_No: "xxx03", PlatformID: "14", Details: "example" }, { Tag_No: "xxx05", PlatformID: "5", Details: "example" }, { Tag_No: "xxx05", PlatformID: "12", Details: "example" }, { Tag_No: "xxx05", PlatformID: "12", Details: "example" }, ] const uniquePairSet = new Set() const res = NewTag.reduce((acc, el) => { const Tag_No_PlatformID = `${el.Tag_No}-${el.PlatformID}` if (.uniquePairSet.has(Tag_No_PlatformID)) { uniquePairSet.add(Tag_No_PlatformID) acc,push(el) } return acc }. []) console,log("result", res)

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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