Javascript 我需要将数组2中的值插入到数组1中,如果它们基于其他两个元素匹配
我知道以前有人问过这类问题,因为我正处于一个绊脚石,如果可能的话,我想把它完成,我需要问一下。我有两个阵列:Javascript 我需要将数组2中的值插入到数组1中,如果它们基于其他两个元素匹配,javascript,arrays,Javascript,Arrays,我知道以前有人问过这类问题,因为我正处于一个绊脚石,如果可能的话,我想把它完成,我需要问一下。我有两个阵列: let arr1 = [{ "Last_Name": "Smith"), "First_Name": "John, "MI": "I", "Fore_Name": ""), "Initials: "" }, "Last_Name": "Doe"), "First_Name": "Mary, "MI": "A", "Fore_Name": "Mary A),
let arr1 = [{
"Last_Name": "Smith"),
"First_Name": "John,
"MI": "I",
"Fore_Name": ""),
"Initials: ""
}, "Last_Name": "Doe"),
"First_Name": "Mary,
"MI": "A",
"Fore_Name": "Mary A),
"Initials: "MA"
},"Last_Name": "Johnson"),
"First_Name": "Bob",
"MI": "B",
"Fore_Name": ""),
"Initials: ""
}]
let arr2 = [{
"Last_Name": "Smith"),
"First_Name": "John,
"MI": "I",
"Fore_Name": "John I"),
"Initials: "JI"
}, "Last_Name": "Doe"),
"First_Name": "Mary,
"MI": "A",
"Fore_Name": "Mary A),
"Initials: "MA"
},"Last_Name": "Johnson"),
"First_Name": "Bob",
"MI": "B",
"Fore_Name": "Bob B"),
"Initials: "BB"
}
}]
我想用array2中的数据更新array1的ForeName
和Initials字段,如果它们是空的,array1[“Last\u Name”]=array2[“Last\u Name”]
和array1[“first\u Name”]的第一个字符。切片(0,1)=array2[“Initials”]。切片(0,1)
。
如果array1的名字不为空,则跳过它
我看过
我认为这很接近。我明白
arra1 = arra1.map(item => {
let item2 = arra2.find(i2 => i2.Last_Name === item.Last_Name);
// not sure what to do here return item2 ? { ...item, ...item2 } : item;
});
并且不确定如何将第一个_名称的第一个字符与Array2首字母的第一个字符匹配
绘制地图时跟踪索引:
arra1 = arra1.map( (item,index) => {
// if !(item["Fore_Name"])
// AND item["Last_Name"] === arra2[index]["Last_Name"]
// AND your slice testing (please with ===)
// THEN item["Fore_Name"] = arra2[index]["Fore_Name"]
// item["Initials"] = arra2[index]["Initials"]
return item
});
map
回调的返回值是将添加到新数组中的项。因此,对于您的示例,以下内容应该有效。注意,您必须为未定义和空值等添加必要的检查
arr1 = arr1.map(item => {
// Return fast is Fore_Name already exists in arr1
if (item.Fore_Name) return item;
let item2 = arr2.find(i2 =>
i2.Last_Name === item.Last_Name
&& item.First_Name.charAt(0) === i2.Initials.charAt(0));
if (item2) {
item.Fore_Name = item2.Fore_Name;
item.Initials = item2.Initials;
}
return item;
});
在比较数组1和数组2中的对象时,可以方便地定义ObjectsReequal函数
我们可以使用它从数组2中找到相关的对象
请注意,这将导致大型数组的性能较差(因为我们这里有n平方行为)。如果您的数组非常大(可能有数千项),则最好从Array2创建一个映射,并使用它来分配值
let arr1=[{“姓”:“史密斯”,“名”:“约翰”,“密苏里州”:“我”,“姓”:“我”,“姓”:“首字母”:“},{“姓”:“Doe”,“姓”:“玛丽”,“密苏里州”:“A”,“姓”:“玛丽A”,“首字母”:“马”},{“姓”:“约翰逊”,“姓”:“鲍勃”,“密苏里州”:“B”,“姓”:“玛丽”,“首字母”:“}]
设arr2=[{“姓氏”:“史密斯”,“姓”:“约翰”,“密苏里”:“我”,“姓”:“约翰一”,“缩写”:“吉”},{“姓氏”:“Doe”,“姓”:“玛丽”,“密苏里”:“A”,“姓”:“玛丽A”,“缩写”:“马”},{“姓氏”:“约翰逊”,“姓”:“鲍勃”,“密苏里”:“B”,“姓”:“鲍勃”,“缩写”:“BB;
函数对象REEQUAL(arr1Obj,arr2Obj){
返回((arr1Obj.Last_Name==arr2Obj.Last_Name)&&(arr1Obj.First_Name.substr(0,1)==arr2Obj.Initials.substr(0,1));
}
让result=arr1.map(arr1Obj=>{
如果(!arr1Obj.Fore_Name&!arr1Obj.Initials){
让arr2Match=arr2.find(arr2Obj=>objectsAreEqual(arr1Obj,arr2Obj));
如果(arr2Match){
arr1Obj.Fore_Name=arr2Match.Fore_Name;
arr1Obj.Initials=arr2Match.Initials;
}
}
返回arr1Obj;
});
日志(“结果:”,结果)代码>通过跟踪map函数中的索引,可以从第二个数组中找到元素。如果条件不匹配,则返回迭代项。如果它们匹配,则返回一个已修改的项
const result=arr1.map((项目,索引)=>{
const itemTwo=arr2[index];
如果(item.Fore_Name!==“”)返回项目;
如果(
!(
item.Last_Name===itemTwo.Last_Name&&
item.First_Name[0]==itemTwo.首字母[0]
)
)
退货项目;
item.Fore_Name=itemTwo.Fore_Name;
item.Initials=itemtoo.Initials;
退货项目;
});
这是一个。请添加有效数据和所需结果。
arr1 = arr1.map(item => {
// Return fast is Fore_Name already exists in arr1
if (item.Fore_Name) return item;
let item2 = arr2.find(i2 =>
i2.Last_Name === item.Last_Name
&& item.First_Name.charAt(0) === i2.Initials.charAt(0));
if (item2) {
item.Fore_Name = item2.Fore_Name;
item.Initials = item2.Initials;
}
return item;
});