尝试使用 javascript 从三个现有对象创建一个新对象
Trying to make a new object from three exsisting objects using javascript
我有三个对象,每个对象都是从 Django-rest 框架序列化的。
每个对象都是配置文件中用户的数组。每个个人资料都需要一个 org_id 和电子邮件才有效。 “activeUsers”和“inactiveUsers”永远不会有
重复,每个元素共享相同的 org_id,而 user_id 和电子邮件将始终不同。 “nonProfileUsers”是排除的所有其他配置文件
“activeUsers”和“inactiveUsers”org_id,注意 user_id 和电子邮件可以而且将会出现多次。
activeUsers = [
{ "org_id": 1, "user_id": 9, "firstName": "Joj", "lastName": "Blonde", "email": "bop@test.ca", },
{"org_id": 1, "user_id": 1, "firstName": "Tyler", "lastName": "Whitfield", "email": "tyler@atg.net", },
]
inactiveUsers = [
{ "org_id": 1, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{"org_id": 1, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", }
]
//user that are in different profiles
nonProfileUsers = [
{ "org_id": 2, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 3, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 4, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
{ "org_id": 2, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
]
我正在使用 java-script,我需要做一些事情。
缩小“nonProfileUsers”以删除重复的 user_id 和电子邮件组合,但至少保留一个 org_id(保留哪个无关紧要)
scaledNonProfileUsers = [
{ "org_id": 2, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
{ "org_id": 2, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
]
合并“activeUsers”和“inactiveUsers”
-我能够完成第 2 步
combinedUsers= [
{ "org_id": 1, "user_id": 9, "firstName": "Joj", "lastName": "Blonde", "email": "bop@test.ca", },
{"org_id": 1, "user_id": 1, "firstName": "Tyler", "lastName": "Whitfield", "email": "tyler@atg.net", },
{ "org_id": 1, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{"org_id": 1, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", }
]
通过比较“scaledNonProfileUsers”与“combinedUsers”创建一个新对象。 “scaledNonProfileUsers”中而不是“combinedUsers”中的电子邮件
将制作最终对象。
finalObj= [
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
]
我真的很难完成第 1 步和第 3 步。
如果我只隔离电子邮件,我可以像这样制作一个数组
[
0:"non@not.ca",
1:"tester@tester.ca"
]
但我需要至少包含一个 org_id 和电子邮件。
到目前为止,这段代码一直是我的方法。
const temp_active = [...inactiveUsers, ...activeUsers,]// master list of both active/inactive
const scaledNonProfileUsers= []//isolate email and make a list of emails
for (var i = 0; i < nonProfileUsers?.length; i++) {
scaledNonProfileUsers.push(nonProfileUsers[i]?.email)
}
const combinedUsers= []//isolate email and make a list of emails
for (var i = 0; i < temp_active?.length; i++) {
combinedUsers.push(temp_active[i]?.email)
}
let combinedUsers_filter = combinedUsers.filter((c, index) => {//filter duplicated emails
return combinedUsers.indexOf(c) === index;
});
let scaledNonProfileUsers_filter = scaledNonProfileUsers.filter((c, index) => {//filter duplicate emails
return scaledNonProfileUsers.indexOf(c) === index;
});
var finalObj = [];
for (var i = 0; i < scaledNonProfileUsers_filter?.length; i++) {
if (!eleContainsInArray(combinedUsers_filter, scaledNonProfileUsers_filter[i])) {
finalObj.push(scaledNonProfileUsers_filter[i])
}
}
function eleContainsInArray(arr, element) {
if (arr != null && arr.length > 0) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == element)
return true;
}
}
return false;
}
console.log(finalObj)
任何人的帮助将不胜感激。
const activeUsers = [
{
org_id: 1,
user_id: 9,
firstName: 'Joj',
lastName: 'Blonde',
email: 'bop@test.ca',
},
{
org_id: 1,
user_id: 1,
firstName: 'Tyler',
lastName: 'Whitfield',
email: 'tyler@atg.net',
},
]
const inactiveUsers = [
{
org_id: 1,
user_id: 3,
firstName: 'James',
lastName: 'Bond',
email: 'test@test.ca',
},
{
org_id: 1,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
]
const nonProfileUsers = [
{
org_id: 2,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
{
org_id: 3,
user_id: 6,
firstName: 'weak',
lastName: 'jdf',
email: 'not@not.ca',
},
{
org_id: 3,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
{
org_id: 4,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
{
org_id: 3,
user_id: 3,
firstName: 'James',
lastName: 'Bond',
email: 'test@test.ca',
},
{
org_id: 2,
user_id: 5,
firstName: 'test',
lastName: 'test',
email: 'tester@tester.ca',
},
{
org_id: 2,
user_id: 3,
firstName: 'James',
lastName: 'Bond',
email: 'test@test.ca',
},
]
const filteredNonProfileUsers = nonProfileUsers.reduce((prev, current) => {
if (
prev.find(
user =>
user.user_id === current.user_id || user.email === current.email
)
)
return prev
return [...prev, current]
}, [])
const activeUsersAndInactiveUsers = [...activeUsers, ...inactiveUsers]
const result = filteredNonProfileUsers.reduce((prev, current) => {
if (
activeUsersAndInactiveUsers.find(
user =>
user.user_id === current.user_id || user.email === current.email
)
)
return prev
return [...prev, current]
}, [])
console.log(result)
使用reduce()
在数组内部循环,使用include()
过滤元素匹配或不匹配:
var activeUsers = [
{ "org_id": 1, "user_id": 9, "firstName": "Joj", "lastName": "Blonde", "email": "bop@test.ca", },
{"org_id": 1, "user_id": 1, "firstName": "Tyler", "lastName": "Whitfield", "email": "tyler@atg.net", },
]
var inactiveUsers = [
{ "org_id": 1, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{"org_id": 1, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", }
]
//user that are in different profiles
var nonProfileUsers = [
{ "org_id": 2, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 3, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 4, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
{ "org_id": 2, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
]
const scaledNonProfileUsers = nonProfileUsers.reduce((prev, curr) => (prev.map(el => el.user_id).includes(curr.user_id) || prev.map(el => el.email).includes(curr.email)) ? [...prev] : [...prev, curr], [])
const combinedUsers = [...inactiveUsers, ...activeUsers]
const finalObj = scaledNonProfileUsers.reduce((prev, curr) => (combinedUsers.map(el => el.email).includes(curr.email)) ? [...prev] : [...prev, curr], [])
console.log(finalObj)
我有三个对象,每个对象都是从 Django-rest 框架序列化的。
每个对象都是配置文件中用户的数组。每个个人资料都需要一个 org_id 和电子邮件才有效。 “activeUsers”和“inactiveUsers”永远不会有
重复,每个元素共享相同的 org_id,而 user_id 和电子邮件将始终不同。 “nonProfileUsers”是排除的所有其他配置文件
“activeUsers”和“inactiveUsers”org_id,注意 user_id 和电子邮件可以而且将会出现多次。
activeUsers = [
{ "org_id": 1, "user_id": 9, "firstName": "Joj", "lastName": "Blonde", "email": "bop@test.ca", },
{"org_id": 1, "user_id": 1, "firstName": "Tyler", "lastName": "Whitfield", "email": "tyler@atg.net", },
]
inactiveUsers = [
{ "org_id": 1, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{"org_id": 1, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", }
]
//user that are in different profiles
nonProfileUsers = [
{ "org_id": 2, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 3, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 4, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
{ "org_id": 2, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
]
我正在使用 java-script,我需要做一些事情。 缩小“nonProfileUsers”以删除重复的 user_id 和电子邮件组合,但至少保留一个 org_id(保留哪个无关紧要)
scaledNonProfileUsers = [
{ "org_id": 2, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
{ "org_id": 2, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
]
合并“activeUsers”和“inactiveUsers” -我能够完成第 2 步
combinedUsers= [
{ "org_id": 1, "user_id": 9, "firstName": "Joj", "lastName": "Blonde", "email": "bop@test.ca", },
{"org_id": 1, "user_id": 1, "firstName": "Tyler", "lastName": "Whitfield", "email": "tyler@atg.net", },
{ "org_id": 1, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{"org_id": 1, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", }
]
通过比较“scaledNonProfileUsers”与“combinedUsers”创建一个新对象。 “scaledNonProfileUsers”中而不是“combinedUsers”中的电子邮件 将制作最终对象。
finalObj= [
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
]
我真的很难完成第 1 步和第 3 步。
如果我只隔离电子邮件,我可以像这样制作一个数组
[
0:"non@not.ca",
1:"tester@tester.ca"
]
但我需要至少包含一个 org_id 和电子邮件。
到目前为止,这段代码一直是我的方法。
const temp_active = [...inactiveUsers, ...activeUsers,]// master list of both active/inactive
const scaledNonProfileUsers= []//isolate email and make a list of emails
for (var i = 0; i < nonProfileUsers?.length; i++) {
scaledNonProfileUsers.push(nonProfileUsers[i]?.email)
}
const combinedUsers= []//isolate email and make a list of emails
for (var i = 0; i < temp_active?.length; i++) {
combinedUsers.push(temp_active[i]?.email)
}
let combinedUsers_filter = combinedUsers.filter((c, index) => {//filter duplicated emails
return combinedUsers.indexOf(c) === index;
});
let scaledNonProfileUsers_filter = scaledNonProfileUsers.filter((c, index) => {//filter duplicate emails
return scaledNonProfileUsers.indexOf(c) === index;
});
var finalObj = [];
for (var i = 0; i < scaledNonProfileUsers_filter?.length; i++) {
if (!eleContainsInArray(combinedUsers_filter, scaledNonProfileUsers_filter[i])) {
finalObj.push(scaledNonProfileUsers_filter[i])
}
}
function eleContainsInArray(arr, element) {
if (arr != null && arr.length > 0) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == element)
return true;
}
}
return false;
}
console.log(finalObj)
任何人的帮助将不胜感激。
const activeUsers = [
{
org_id: 1,
user_id: 9,
firstName: 'Joj',
lastName: 'Blonde',
email: 'bop@test.ca',
},
{
org_id: 1,
user_id: 1,
firstName: 'Tyler',
lastName: 'Whitfield',
email: 'tyler@atg.net',
},
]
const inactiveUsers = [
{
org_id: 1,
user_id: 3,
firstName: 'James',
lastName: 'Bond',
email: 'test@test.ca',
},
{
org_id: 1,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
]
const nonProfileUsers = [
{
org_id: 2,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
{
org_id: 3,
user_id: 6,
firstName: 'weak',
lastName: 'jdf',
email: 'not@not.ca',
},
{
org_id: 3,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
{
org_id: 4,
user_id: 2,
firstName: 'Chen',
lastName: 'rain',
email: 'posihdun@gmail.com',
},
{
org_id: 3,
user_id: 3,
firstName: 'James',
lastName: 'Bond',
email: 'test@test.ca',
},
{
org_id: 2,
user_id: 5,
firstName: 'test',
lastName: 'test',
email: 'tester@tester.ca',
},
{
org_id: 2,
user_id: 3,
firstName: 'James',
lastName: 'Bond',
email: 'test@test.ca',
},
]
const filteredNonProfileUsers = nonProfileUsers.reduce((prev, current) => {
if (
prev.find(
user =>
user.user_id === current.user_id || user.email === current.email
)
)
return prev
return [...prev, current]
}, [])
const activeUsersAndInactiveUsers = [...activeUsers, ...inactiveUsers]
const result = filteredNonProfileUsers.reduce((prev, current) => {
if (
activeUsersAndInactiveUsers.find(
user =>
user.user_id === current.user_id || user.email === current.email
)
)
return prev
return [...prev, current]
}, [])
console.log(result)
使用reduce()
在数组内部循环,使用include()
过滤元素匹配或不匹配:
var activeUsers = [
{ "org_id": 1, "user_id": 9, "firstName": "Joj", "lastName": "Blonde", "email": "bop@test.ca", },
{"org_id": 1, "user_id": 1, "firstName": "Tyler", "lastName": "Whitfield", "email": "tyler@atg.net", },
]
var inactiveUsers = [
{ "org_id": 1, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{"org_id": 1, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", }
]
//user that are in different profiles
var nonProfileUsers = [
{ "org_id": 2, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 6, "firstName": "weak", "lastName": "jdf", "email": "not@not.ca", },
{ "org_id": 3, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 4, "user_id": 2, "firstName": "Chen", "lastName": "rain", "email": "posihdun@gmail.com", },
{ "org_id": 3, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
{ "org_id": 2, "user_id": 5, "firstName": "test", "lastName": "test", "email": "tester@tester.ca", },
{ "org_id": 2, "user_id": 3, "firstName": "James", "lastName": "Bond", "email": "test@test.ca", },
]
const scaledNonProfileUsers = nonProfileUsers.reduce((prev, curr) => (prev.map(el => el.user_id).includes(curr.user_id) || prev.map(el => el.email).includes(curr.email)) ? [...prev] : [...prev, curr], [])
const combinedUsers = [...inactiveUsers, ...activeUsers]
const finalObj = scaledNonProfileUsers.reduce((prev, curr) => (combinedUsers.map(el => el.email).includes(curr.email)) ? [...prev] : [...prev, curr], [])
console.log(finalObj)