将两个数组与对象权益进行比较
Posted
技术标签:
【中文标题】将两个数组与对象权益进行比较【英文标题】:Compare two array with object equity 【发布时间】:2020-07-31 14:08:51 【问题描述】:我有两种类型的数据结构
var dataA = [
"Employee Name": "Mr. X",
id: "1"
,
"Employee Name": "Mr. Y",
id: "2"
,
"Employee Name": "Mr. Z",
id: "3"
];
var dataB = [
id: "1",
"Portfolio Lead": "A"
,
id: "2",
"Portfolio Lead": "B"
,
id: "4",
"Portfolio Lead": "D"
];
现在我正在比较两个数组的id
值,并将"Portfolio Lead"
属性添加到dataA
。
下面是代码,
function mergeTwoArray()
dataA.forEach(row =>
dataB.forEach(lead =>
if (lead["id"] === row["id"])
row["Portfolio Lead"] = lead["Portfolio Lead"];
);
);
console.log(dataA);
问题是,
当id
不匹配时,我需要将"Portfolio Lead"
添加为#NA
。如果我尝试添加 if 语句,所有对象都将 "Portfolio Lead"
添加为 #NA
。
请告诉我我在这里做错了什么。
stackBlitz 链接https://stackblitz.com/edit/typescript-nypqge?file=index.ts
输出应该是
var dataA = [
"Employee Name": "Mr. X",
id: "1",
"Portfolio Lead": "A"
,
"Employee Name": "Mr. Y",
id: "2",
"Portfolio Lead": "B"
,
"Employee Name": "Mr. Z",
id: "3",
"Portfolio Lead": "#NA"
];
【问题讨论】:
你想要输出什么?你能描述更多吗? 更新了我的问题 【参考方案1】:添加一个布尔条件来检查是否发生匹配。如果没有,则根据需要将您的对象属性设置为“#NA”。
function mergeTwoArray()
dataA.forEach(row =>
var rowMatches = false;
dataB.forEach(lead =>
if (lead["id"] === row["id"])
rowMatches = true;
row["Portfolio Lead"] = lead["Portfolio Lead"];
);
if (!rowMatches)
row["Portfolio Lead"] = "#NA";
);
console.log(dataA);
【讨论】:
【参考方案2】:你可以试试这个:
function mergeTwoArray()
dataA.forEach(row =>
let idxId = dataB.findIndex((lead) => lead["id"] == row["id"]);
if (idxId >= 0)
row["Portfolio Lead"] = dataB[idxId]["Portfolio Lead"];
else
row["Portfolio Lead"] = "#NA";
);
console.log(dataA);
【讨论】:
【参考方案3】:你可以像下面这样添加一个 else if 语句 -
else if(row["id"] > lead["id"])
row["Portfolio Lead"] = "#NA";
当您将row["Portfolio Lead"] = "#NA";
放入 else 中时,每次都会阻止其更新,因为对于外循环中的每次迭代,内循环执行 dataB 次的长度。在这里我正在检查外部循环的 id > 内部循环的 id 然后更新。
所以你的代码看起来像:
dataA.forEach(row =>
dataB.forEach(lead =>
if (lead["id"] === row["id"])
row["Portfolio Lead"] = lead["Portfolio Lead"];
else if(row["id"] > lead["id"])
row["Portfolio Lead"] = "#NA";
);
);
【讨论】:
以上是关于将两个数组与对象权益进行比较的主要内容,如果未能解决你的问题,请参考以下文章
将 NSManagedObject 数组与另一个“对象”类型 Swift 2 的数组进行比较
Vuejs2 - 如何将两个数组中的元素与计算属性进行比较?