Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
使用Angular.js/JavaScript对两个数组值进行排序并按日期合并_Javascript_Arrays_Angularjs - Fatal编程技术网

使用Angular.js/JavaScript对两个数组值进行排序并按日期合并

使用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':

我有两个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':'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中开始使用正确语法之前,它只需要做一件事