使用Angular.js/JavaScript对两个数组值进行排序并按日期合并
我有两个json数组,两个数组都有使用Angular.js/JavaScript对两个数组值进行排序并按日期合并,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我有两个json数组,两个数组都有date字段值。这里我需要比较数组和合并到一个数组中。我的代码如下: var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'}]; var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':
date
字段值。这里我需要比较数组和合并到一个数组中。我的代码如下:
var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'}];
var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
这里我有两个数组,我需要根据日期比较这两个数组,并将这两个值合并到一个数组中。预期输出如下所示
var finalArr=[{'name':'Ram','date':'2017-12-06','model':'mmm'},{'name':'Raja','date':'2017-12-07','model':''},{'name':'Rahul','date':'2017-12-08','model':''},{'name':'','date':'2017-12-09','model':'rrr'}]
我的预期输出如上所示。我试着像下面那样
angular.forEach(firstArr,function(obj1){
angular.forEach(secondArr.task,function(obj2){
if (new Date(obj1.date)=== new Date(obj2.date)) {
}
})
})
但是像这样,我对两个数组的长度有点困惑,因为它可能/可能不一样。试试这个
var finelArr = []
angular.forEach(firstArr, function(val) {
angular.forEach(secondArr, function(item) {
if (val.date === item.date) {
finelArr.push({ name: val.name, date: val.date, model: item.model })
}
})
})
试试这个
var finelArr = []
angular.forEach(firstArr, function(val) {
angular.forEach(secondArr, function(item) {
if (val.date === item.date) {
finelArr.push({ name: val.name, date: val.date, model: item.model })
}
})
})
我关注的是JS部分,而不是角度版本 逻辑
- 由于需要基于日期字符串合并对象,所以可以创建一个hashMap,其中dateString作为属性,object作为值
- 然后可以使用
合并对象。如果不能,您甚至可以在循环中使用“Onject.assign
for..”,或者只使用两个循环并手动设置特定属性
- 现在循环这个hashMap并检索分组对象
var firstArr=[{'name':'Ram','date':'2017-12-06',{'name':'Raja','date':'2017-12-07',{'name':'Rahul','date':'2017-12-08'}];
var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
var hashMap={};
[firstArr,secondArr].forEach(函数(arr){
arr.forEach(功能(obj){
hashMap[obj.date]=Object.assign(Object.create(null),hashMap[obj.date]|{},obj);
})
});
var result=Object.keys(hashMap.map)(x=>hashMap[x]);
log(result)
我关注的是JS部分,而不是angular版本
逻辑
- 由于需要基于日期字符串合并对象,所以可以创建一个hashMap,其中dateString作为属性,object作为值
- 然后可以使用
合并对象。如果不能,您甚至可以在循环中使用“Onject.assign
for..”,或者只使用两个循环并手动设置特定属性
- 现在循环这个hashMap并检索分组对象
var firstArr=[{'name':'Ram','date':'2017-12-06',{'name':'Raja','date':'2017-12-07',{'name':'Rahul','date':'2017-12-08'}];
var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
var hashMap={};
[firstArr,secondArr].forEach(函数(arr){
arr.forEach(功能(obj){
hashMap[obj.date]=Object.assign(Object.create(null),hashMap[obj.date]|{},obj);
})
});
var result=Object.keys(hashMap.map)(x=>hashMap[x]);
console.log(result)
您可以使用array#reduce
获取具有相同日期的合并对象。在数组中#reduce
,合并具有相同日期的对象,然后使用Object.values()
获取所有值
var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'},
secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
var结果=第一个ARR.concat(第二个ARR.REDUCT)(r,o)=>{
r[o.date]=Object.assign({},r[o.date]|{name:'',model:'',o);
返回r;
},{});
变量输出=对象值(结果);
控制台日志(输出)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以使用array#reduce
获取具有相同日期的合并对象。在数组中#reduce
,合并具有相同日期的对象,然后使用Object.values()
获取所有值
var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'},
secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
var结果=第一个ARR.concat(第二个ARR.REDUCT)(r,o)=>{
r[o.date]=Object.assign({},r[o.date]|{name:'',model:'',o);
返回r;
},{});
变量输出=对象值(结果);
控制台日志(输出)代码>
.as控制台包装{max height:100%!important;top:0;}
试试这个。如果不想修改原始阵列,则必须事先对其进行深度克隆。与爱迪生的解决方案不同,这还将包括第二个阵列中的项目
var firstArr=[{'name':'Ram','date':'2017-12-06',{'name':'Raja','date':'2017-12-07',{'name':'Rahul','date':'2017-12-08'}];
var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
常数newArr=(arr1,arr2)=>{
常量finalArr=arr1.map((第一个元素)=>{
firstElement.model=“”;
arr2.forEach((第二个元素,索引)=>{
if(secondElement.date==firstElement.date){
firstElement.model=secondElement.model;
arr2.拼接(索引1);
}
});
返回第一个元素;
});
arr2.forEach((元素)=>{
element.name=“”;
最终推动(元素);
});
返回终局;
};
console.log(newArr(firstArr,secondArr))代码>试试这个。如果不想修改原始阵列,则必须事先对其进行深度克隆。与爱迪生的解决方案不同,这还将包括第二个阵列中的项目
var firstArr=[{'name':'Ram','date':'2017-12-06',{'name':'Raja','date':'2017-12-07',{'name':'Rahul','date':'2017-12-08'}];
var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
常数newArr=(arr1,arr2)=>{
常量finalArr=arr1.map((第一个元素)=>{
firstElement.model=“”;
arr2.forEach((第二个元素,索引)=>{
if(secondElement.date==firstElement.date){
firstElement.model=secondElement.model;
arr2.拼接(索引1);
}
});
返回第一个元素;
});
arr2.forEach((元素)=>{
element.name=“”;
最终推动(元素);
});
返回终局;
};
console.log(newArr(firstArr,secondArr))代码>Angular是一个带有大型库的大型框架,但在v中开始使用正确语法之前,它只需要做一件事