Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将2个对象数组相互映射,但长度不同_Javascript_Dictionary - Fatal编程技术网

Javascript 将2个对象数组相互映射,但长度不同

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和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",
  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"
}
];