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