根据条件获取1st和Last数组

时间:2017-09-04 09:39:58

标签: javascript arrays multidimensional-array google-apps-script

我有一个看起来像这样的数组。

[[2017-08-31,AA, 12:00 PM], 
 [2017-08-31,AA, 01:00 PM], 
 [2017-08-31,AA, 01:00 PM], 
 [2017-08-31,AA, 02:00 PM], 
 [2017-08-31,BB, 03:00 PM], 
 [2017-08-31,BB, 04:00 PM]]

这是我的代码,关于我如何根据时间对其进行排序。

 TITOArray.push([output_stddate,std_timein]);
    TITOArray.sort(function (a, b) {
      var time1 = a[2];
      var time2 = b[2];
      return new Date('1970/01/01 ' + time1) - new Date('1970/01/01 ' + time2);
    });
  }

如何获取第一个和最后一个数组?

像这样。

[[2017-08-31,AA, 12:00 PM], 
 [2017-08-31,AA, 02:00 PM], 
 [2017-08-31,BB, 03:00 PM], 
 [2017-08-31,BB, 04:00 PM]]

只要第1列和第2列中的条件相同,就获得第1个和最后一个数组。

我的意思是每个Column1和Column 2组都获得第一个和最后一个数组

TYSM寻求帮助

2 个答案:

答案 0 :(得分:0)

function firstandlast() 
{
  var tA=[['2017-08-31','AA','12:00 PM'],['2017-08-31','AA','01:00 PM'],['2017-08-31','AA','01:00 PM'],['2017-08-31','AA','02:00 PM'],['2017-08-31','BB','03:00 PM'],['2017-08-31','BB','04:00 PM']];
  var gA=[];
  for(var i=0;i<tA.length;i++)
  {
    if(i==0)
    {
      gA.push(tA[i]);
    }
    else
    {
      if(tA[i][1]!=last1)
      {
        gA.push(tA[i-1]);
        gA.push(tA[i]);
      }
    }
    var last1=tA[i][1];
  }
  if(gA.indexOf(tA[tA.length-1])==-1)
  {
    gA.push(tA[tA.length-1]);
  }
  Logger.log(gA);
}

答案 1 :(得分:0)

var testData = [['2017-08-31','AA','12:00 PM'],
['2017-08-30','AA','01:00 PM'],
['2017-08-31','AA','01:00 PM'],
['2017-08-31','AA','02:00 PM'],
['2017-08-31','BB','03:00 PM'],
['2017-08-31','BB','04:00 PM']];
function treeishSort (multiArray) {
    var rootNode = {};
    multiArray.forEach(function(row) {
        pushNode(row[0], row[1], row[2]);
    });
    function pushNode(date, category, time) {
        var key = date + '\n' + category;

        if(rootNode[key] || (rootNode[key] = [])) {
            rootNode[key].push(time);
            if(rootNode[key].length > 1) { //if there are two item sort the array;
                rootNode[key].sort(function (time1, time2){
                    return new Date('1970/01/01 ' + time1) - new Date('1970/01/01 ' + time2)
                 });
            }
            if(rootNode[key].length > 2) { //if there are three items repalce the array with first and last
                rootNode[key] = [rootNode[key][0], rootNode[key][2]]; 
            }
        }
    }
    function getFirstLast(tree) {
        let temp = [];
        Object.keys(tree).forEach(function (key) {
            var date = key.split('\n')[0];
            var category = key.split('\n')[1];
            temp.push([date, category, tree[key][0]]);
            if(tree[key].length > 1) temp.push([date, category, tree[key][1]]); //there might be only item so this check
        })
        return temp;
    }
    return getFirstLast(rootNode);
}
console.log(treeishSort(testData));
编辑1: 我已经转换成了一个函数和pre es5