Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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 如何按属性筛选一组嵌套数据?_Javascript_Arrays_Functional Programming - Fatal编程技术网

Javascript 如何按属性筛选一组嵌套数据?

Javascript 如何按属性筛选一组嵌套数据?,javascript,arrays,functional-programming,Javascript,Arrays,Functional Programming,问题: 如何按最晚的生效日期从每组中筛选/提取对象 我不知道你为什么要缩减为数组如果你想要一个对象,可以这样做: let groupedByKeyNames = Object.keys(groupedByName); // pluck/filter out by latest effectDates let output = groupedByKeyNames.reduce((acc, item) =>{ acc[item]=[groupedByName[item].sort((a

问题: 如何按最晚的生效日期从每组中筛选/提取对象


我不知道你为什么要缩减为数组如果你想要一个对象,可以这样做:

let groupedByKeyNames = Object.keys(groupedByName);
// pluck/filter out by latest effectDates
let output = groupedByKeyNames.reduce((acc, item) =>{
    acc[item]=[groupedByName[item].sort((a,b)=>(new Date(a.effectiveDate))-(new Date(b.effectiveDate))).pop()];
    return acc;
},{});

按函数对任何数组排序,然后获取最后日期

function getLast(arr){
    var sorted = arr.sort(function(a,b){
        var aDate = new Date(a).getTime(),
             bDate = new Date(b).getTime();
        if(bDate == aDate){
            return 0;
        }
        else{
            return aDate > bDate? -1 : 1;
        }
    });
    //first is lastest
    return sorted[0];
}

var arr = [ 
        { name: 'first', effectiveDate: '2016-02-01T00:00:00+00:00' },
       { name: 'last', effectiveDate: '2016-09-01T00:00:00+00:00' } 
       ];

getLast(arr);//name: 'last', effectiveDate: '2016-09-01T00:00:00+00:00'

//full code

data =  { 
   abc: 
     [ { name: 'abc', effectiveDate: '2016-01-01T00:00:00+00:00' },
       { name: 'abc', effectiveDate: '2016-04-01T00:00:00+00:00' },
       { name: 'abc', effectiveDate: '2016-05-01T00:00:00+00:00' } ],
   abcd: 
     [ { name: 'abcd', effectiveDate: '2016-02-01T00:00:00+00:00' },
       { name: 'abcd', effectiveDate: '2016-09-01T00:00:00+00:00' } ]
  }
var allKeys = Object.keys(data),
newData = {}
for(var i=0; i < allKeys.length;i++){
    newData[allKeys[i]] = [getLast(data[allKeys[i]])];
}

你的代码在做什么?它没有做什么?问题是什么?缺少标识符修复了缺少的标识符。试图简化问题似乎不起作用我已经更新了repl和实时代码,现在已经测试并开始工作了。无论如何,关键是getLast函数不,我不想获取最新生效日期,我想维护组并获取每个组的最新生效日期。在上面的问题中,我期望输出我想要一个具有相同形状的新对象,每个键只有一个对象。我希望减少到数组是我的错误。看起来不起作用,我已经用repl和实时代码更新了,我正试图用你的回答来修复它,因为我们也在说话。@Matthew哦,对不起,我总是忘记返回累加器…:/
function getLast(arr){
    var sorted = arr.sort(function(a,b){
        var aDate = new Date(a).getTime(),
             bDate = new Date(b).getTime();
        if(bDate == aDate){
            return 0;
        }
        else{
            return aDate > bDate? -1 : 1;
        }
    });
    //first is lastest
    return sorted[0];
}

var arr = [ 
        { name: 'first', effectiveDate: '2016-02-01T00:00:00+00:00' },
       { name: 'last', effectiveDate: '2016-09-01T00:00:00+00:00' } 
       ];

getLast(arr);//name: 'last', effectiveDate: '2016-09-01T00:00:00+00:00'

//full code

data =  { 
   abc: 
     [ { name: 'abc', effectiveDate: '2016-01-01T00:00:00+00:00' },
       { name: 'abc', effectiveDate: '2016-04-01T00:00:00+00:00' },
       { name: 'abc', effectiveDate: '2016-05-01T00:00:00+00:00' } ],
   abcd: 
     [ { name: 'abcd', effectiveDate: '2016-02-01T00:00:00+00:00' },
       { name: 'abcd', effectiveDate: '2016-09-01T00:00:00+00:00' } ]
  }
var allKeys = Object.keys(data),
newData = {}
for(var i=0; i < allKeys.length;i++){
    newData[allKeys[i]] = [getLast(data[allKeys[i]])];
}