如果对象中的字段不相同,如何从一个对象创建两个对象



我有下面的对象数组,我必须根据以下条件创建一个新的对象数组

  1. 如果id不为空并且注册id为空,则将此对象推入结果数组。

  2. 如果注册id不为空并且id为空,则将注册id分配给id,并将此对象推送到结果数组中。

  3. 如果id不为空并且注册id不为空白,则

    a.检查id和注册id是否相同,然后将注册id分配给id,将此对象推入结果数组。

    b。id和注册id不相同,创建两个对象;id":1和另一个将注册id分配给id("id":100(

var userData =[{
"id": 1,
"name": "abcd",
"place":"xyz",
"registrationid": 100

}];
var result = [];
userData.forEach( (element) => {
if(element.id !="" && element.registrationid ==""){
console.log("1");
result.push(element);

} else if(element.registrationid !="" && element.id ==""){
console.log("2");
element.id  = element.registrationid;
result.push(element);

} else if(element.registrationid !="" && element.id !=""){
console.log("3");
if(element.id  == element.registrationid){
console.log("4");
element.id  = element.registrationid;
result.push(element);

}else if(element.id  != element.registrationid){
console.log("5");
result.push(element)
element.id  = element.registrationid;
result.push(element)
}

}
});
console.log(result)

预期输出结果数组应返回

[
{
"id": 1,
"name": "abcd",
"place":"xyz",
"registrationid": 100
},
{
"id": 100,
"name": "abcd",
"place":"xyz",
"registrationid": 100
},
];

经历了这一切,但无法得到任何想法,请帮助我,伙计们

请尝试以下

const userData = [{
"id": 1,
"name": "abcd",
"place": "xyz",
"registrationid": 100
}];
const result = [];
userData.forEach((data) => {
if (data.id && !data.registrationid) {
result.push(data);
}
if (!data.id && data.registrationid) {
const output = {
...data,
id: data.registrationid
}
result.push(output)
}

if (data.id && data.registrationid) {
if (data.id === data.registrationid) {
result.push(data);
} else {
const obj1 = {...data, id: 1};
const obj2 = {...data, id: 100}

result.push(obj1, obj2)
}
}
});

console.log(result);

如果你想做这项业务,你可以创建新的对象

var userData = [
{
id: 1,
name: "abcd",
place: "xyz",
registrationid: 100,
},
];
var result = [];
userData.forEach((element) => {
let newEl;
if (element.id != "" && element.registrationid == "") {
newEl = { ...element };
result.push(newEl);
} else if (element.registrationid != "" && element.id == "") {
newEl = { ...element, id: element.registrationid };
result.push(newEl);
} else if (element.registrationid != "" && element.id != "") {
result.push(element);
if (element.id != element.registrationid) {
newEl = { ...element, id: element.registrationid };
result.push(newEl);
}
}
});
console.log(result);
var userData = [{
"id": 1,
"name": "abcd",
"place": "xyz",
"registrationid": 100
}];
var result = [];
userData.forEach((element) => {
if (element.id != "" && element.registrationid == "") {
console.log("1");
result.push(element);
} else if (element.registrationid != "" && element.id == "") {
console.log("2");
element.id = element.registrationid;
result.push(element);
} else if (element.registrationid != "" && element.id != "") {
console.log("3");
if (element.id == element.registrationid) {
console.log("4");
element.id = element.registrationid;
result.push(element);
} else if (element.id != element.registrationid) {
console.log("5");
result.push(element)
// do not mutate data as below
//element.id  = element.registrationid;
// instead, create a new object and assign registrationid to id, like below
result.push({ ...element, id: element.registrationid })
result.push(element)
}
}
});
console.log(result)

问题出在对象的突变上。这里有一篇关于JS对象突变的好文章。

在步骤3b:中创建副本

var userData = [{
"id": 1,
"name": "abcd",
"place": "xyz",
"registrationid": 100
}];
var result = [];
userData.forEach((element) => {
if (element.id != "" && element.registrationid == "") {
console.log("1");
result.push(element);
} else if (element.registrationid != "" && element.id == "") {
console.log("2");
element.id = element.registrationid;
result.push(element);
} else if (element.registrationid != "" && element.id != "") {
console.log("3");
if (element.id == element.registrationid) {
console.log("4");
result.push(element);
} else if (element.id != element.registrationid) {
console.log("5");
result.push({
...element
})
element.id = element.registrationid;
result.push(element)
}
}
});
console.log(result)

3a中的赋值没有意义。我删除了它。我更喜欢flatMap

var userData = [{
"id": 1,
"name": "abcd",
"place": "xyz",
"registrationid": 100
}];
var result = userData.flatMap((element) => {
if (element.id != "" && element.registrationid == "") {
console.log("1");
return element;
} else if (element.registrationid != "" && element.id == "") {
console.log("2");
element.id = element.registrationid;
return element;
} else if (element.registrationid != "" && element.id != "") {
console.log("3");
if (element.id == element.registrationid) {
console.log("4");
return element;
} else if (element.id != element.registrationid) {
console.log("5");
const oldId = element.id;
element.id = element.registrationid;
return [{
...element, id: oldId
}, element];
}
}
});
console.log(result)

最新更新