Javascript 将2个对象数组相互映射,但长度不同
我未能将arr1和arr2映射到一起。如何将Arr2的现有属性密钥分配给Arr1?输出的长度应为Arr1 预期结果Javascript 将2个对象数组相互映射,但长度不同,javascript,dictionary,Javascript,Dictionary,我未能将arr1和arr2映射到一起。如何将Arr2的现有属性密钥分配给Arr1?输出的长度应为Arr1 预期结果 arr1 = [{ date: "2017-4-01" }, { date: "2017-4-02" }, { date: "2017-4-03" }, { date: "2017-4-04" }] arr2 = [{ date: "2017-4-01", company: "apple" }, { date: "2017-4-04", compa
arr1 = [{
date: "2017-4-01"
}, {
date: "2017-4-02"
}, {
date: "2017-4-03"
}, {
date: "2017-4-04"
}]
arr2 = [{
date: "2017-4-01",
company: "apple"
}, {
date: "2017-4-04",
company: "google"
}]
arr2可能是这样的
arr3 = [{
date: "2017-4-01",
company: "apple"
}, {
date: "2017-4-02"
}, {
date: "2017-4-03"
}, {
date: "2017-4-04",
company: "google"
}]
意味着它可能有多个相同的日期,如果是这种情况,公司应该是数组而不是字符串。您可以使用map()
和find()
将对象与其他数组中的相同日期匹配
var arr1=[{日期:“2017-4-01”},{日期:“2017-4-02”},{日期:“2017-4-03”},{日期:“2017-4-04”}]
var arr2=[{日期:“2017-4-01”,公司:“苹果”},{日期:“2017-4-04”,公司:“谷歌”}]
var结果=arr1.map(函数(e){
var f=arr2.find(a=>a.date==e.date);
返回f?e=Object.assign({},e,f):e;
})
console.log(JSON.stringify(result,0,4))
可以用于arr2
并用于结果的任意属性计数
var arr1=[{date:“2017-4-01”},{date:“2017-4-02”},{date:“2017-4-03”},{date:“2017-4-04”}],
arr2=[{日期:“2017-4-01”,公司:“苹果”,foo:24},{日期:“2017-4-04”,公司:“谷歌”},
map=newmap(arr2.map(o=>[o.date,o]),
result=arr1.map(o=>Object.assign({},o,map.get(o.date)|{}));
控制台日志(结果)
您可以使用过滤器()
和映射()
的组合
如果有其他属性,则只需更改If(filteredArray.length>0)的主体即可
arr2
不需要排序
const arr1=[{date:“2017-4-01”},{date:“2017-4-02”},{date:“2017-4-03”=},{date:“2017-4-04”}];
const arr2=[{日期:“2017-4-01”,公司:“苹果”},{日期:“2017-4-04”,公司:“谷歌”},{日期:“2017-4-04”,公司:“特斯拉”}];
常量arr3=arr1.map(el=>{
常量filterDarray=arr2.filter(e=>e.date===el.date)
如果(filteredArray.length>0){
让公司;
if(filteredArray.length==1){
公司=filteredArray[0]。公司
}否则{
company=filteredArray.map(e=>e.company);
}
返回{date:el.date,company:company};
}
返回el;
})
console.log(arr3)
请添加想要的结果,以及您尝试过的结果。@NinaScholz更新了预期结果。我喜欢第一种方法,它使用object.assign更干净,但如果arr2具有相同的日期,则有一个缺陷,看一看,如果arr2有多个相同的日期,那么公司名称应该是数组而不是字符串。太好了,这很干净!但是如果arr2看起来像这样呢?const arr2=[{日期:“2017-4-01”,公司:“苹果”},{日期:“2017-4-04”,公司:“谷歌”},{日期:“2017-4-04”,公司:“特斯拉”}]@GialaJefferson用您的新用户案例更新了答案
const arr2 = [{
date: "2017-4-01",
company: "apple"
}, {
date: "2017-4-04",
company: "google"
},
{
date: "2017-4-04",
company: "tesla"
}
];