如何解决在对象的父数组中查找唯一的对象
我有一个如下所示的对象数组:
const myArray = [
{
main_query: "query-1",conditions: [
{
field: "branch_primary",query: "1"
},{
field: "web_domain",query: "google.de"
}
]
},{
main_query: "query-1",query: "2"
},query: "3"
},query: "google.de"
}
]
}
];
请注意,我在每个父对象中都使用 key:条件嵌套了对象数组。所有三个主要父对象都有键:main_query和条件。
main_query的值是字符串,并且对于所有三个主要对象而言都是相同的。
条件再次是使用键:字段和查询
的对象数组除了字段:“ primary_branch” 的查询键值外,所有三个主要对象均具有相同的键值对/外观相同,分别为1、2、3。
我正在使用以下代码找出对象的唯一数组。
const keys = ["main_query","conditions"];
const filtered = myArray.filter(
((s) => (o) =>
((k) => !s.has(k) && s.add(k))(keys.map((i) => o[i]).join("|")))(
new Set()
)
);
const result = filtered.map((o) => Object.fromEntries(keys.map((k) => [k,o[k]])));
console.log(result);
不幸的是,我得到的结果如下:
{
main_query: "query-1",conditions: [{
field: "branch_primary",query: "1"
},{
field: "web_domain",query: "google.de"
}
]
}
但是我希望所有三个对象都将显示在控制台中,因为字段“ primary_branch”具有不同的查询值。
预期输出应为:
{
main_query: "query-1",query: "google.de"
}
]
},{
main_query: "query-1",query: "2"
},query: "3"
},query: "google.de"
}
]
}
Here my link to the codepen regarding this code.
解决方法
考虑到我们不应该依赖对象中的属性顺序,并且import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
# Second File being ran
import medform
reader = SimpleMFRC522()
try:
# user id being created
c = string.ascii_letters + string.digits
op = "".join(choice(c) for x in range(randint(8,16)))
# Printed before tag is scanned
print("Please Scan tag " )
reader.write(op + op)
# if tag is scanned / id created open second file
if reader.write(op + op):
os.system('python medform.py')
else:
print("Scan Tag First" )
# Print after tag is scanned
print("Scan Complete")
finally:
GPIO.cleanup()
中对象的顺序不相关,因此我将使用JSON.stringify
为您的对象创建一个标识符。我建议按字段对条件进行排序,并将所有内容编码为数组:
conditions
,
比其他答案复杂得多,但这是我的有效解决方案:
function uniqueItems(arr) {
var uniqueArr = [],uniqueArrStrings = [];
arr.forEach(el => {
if(!uniqueArrStrings.includes(JSON.parse(JSON.stringify(el).toString()).toString())) {
uniqueArrStrings.push(JSON.parse(JSON.stringify(el).toString()).toString());
uniqueArr.push(JSON.parse(JSON.stringify(el).toString()));
};
});
return uniqueArr;
};
,
这将提供唯一的对象数组
for(var myObj of myArray) {
var set = new Set();
for(var i = 0; i < myObj.conditions.length; i++) {
var condition = myObj.conditions[i];
var strCond = JSON.stringify(condition);
if(set.has(strCond)) {
myObj.conditions.splice(i,1);
i--;
continue;
}
set.add(strCond);
}
}
console.log(myArray)
,
创建一个函数,该函数将带有对象的数组作为输入,并提供另一个数组作为输出,但仅内部具有唯一对象(适用于任何类型的值或对象)。
function uniqueItems(arr) {
let uniqueArr = [];
arr.forEach(el => {
if (!uniqueArr.includes(el)) {
uniqueArr.push(el);
};
});
return uniqueArr;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。