我有下面的对象数组,我必须根据以下条件创建一个新的对象数组
-
如果id不为空并且注册id为空,则将此对象推入结果数组。
-
如果注册id不为空并且id为空,则将注册id分配给id,并将此对象推送到结果数组中。
-
如果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)