找到数组中最后一个非空值的最佳方法是什么

时间:2018-02-02 17:56:54

标签: javascript arrays

我有一个函数,我在multidimensionnal数组中得到第一个非空值。在我的例子中,第一个非空值是B,因为我首先通过列通过数组。 现在,在这个函数中,我还需要得到最后一个非空值。在我的例子中,“C”是最后一个非空值。因为“C”在最远的列中。 那么......我如何在我的功能中获得C?

谢谢!

function findFirstAndLastValue (timeline) {
  for (var col = 0; col < timeline[0].length; col++) {
      for (var row = 0; row < 4; row++) {
        if (timeline[row][col] != '') {
          return [row, col];
        }
      }
    }
}

function getFirstAndLastValue() {
    var projectTl = [
      ['','','A','A','',''],
      ['','B','B','','',''],
      ['','','','','C',''],
      ['','','D','D','','']
    ] 

    var position = findFirstAndLastValue(projectTl);
    console.log(position)
}

getFirstAndLastValue();

4 个答案:

答案 0 :(得分:2)

使用完全相同的代码,但使其向后循环而不是向前循环可以获得所需的结果..您也可以reverse数组,或采用任意数量的“功能”方法。

function findFirstAndLastValue (timeline) {
  for (var col = timeline[0].length; col--;) {
      for (var row = 4; row--;) {
        if (timeline[row][col] != '') {
          return [row, col];
        }
      }
    }
}

var projectTl = [
  ['','','A','A','',''],
  ['','B','B','','',''],
  ['','','','','C',''],
  ['','','D','D','','']
] 

  var position = findFirstAndLastValue(projectTl);
  console.log(position)

答案 1 :(得分:2)

您可以使用reduce()方法并返回一个对象。

&#13;
&#13;
var projectTl = [
  ['', '', 'A', 'A', '', ''],
  ['', 'B', 'B', '', '', ''],
  ['', '', '', '', 'C', ''],
  ['', '', 'D', 'D', '', '']
]

const findInArr = data => {
  let temp = {
    first: null,
    last: null
  }
  return data.reduce((r, arr) => {
    arr.forEach(function(e, i) {
      if (e) {
        if (temp.last == null || i > temp.last) {
          temp.last = i
          r.last = e
        }
        if (temp.first == null || i < temp.first) {
          temp.first = i;
          r.first = e;
        }
      }
    })
    return r;
  }, Object.assign({}, temp))
}

console.log(findInArr(projectTl))
&#13;
&#13;
&#13;

答案 2 :(得分:2)

如果您正在js中寻找一种衬板,可以这样做

// For Single arrays | get last non empty value 
let your_array = ['','A','B','','C','', ''];
let last_non_empty_value = your_array.filter(item => item).pop(-1);
console.log(last_non_empty_value);

// for Getting Last Non Empty values only from multi-dimensional arrays
let a = [
    ['', '', 'A', 'E', '', ''],
    ['', 'B', 'C', '', '', ''],
    ['', '', '', '', 'D', ''],
    ['', '', 'F', 'G', '', '']
];
let last_values = a.map(item=>item.filter(item=>item).pop());
console.log(last_values);

答案 3 :(得分:0)

您需要从最后一个索引循环您的cols:

for (var col = timeline[0].length - 1; col > 0; col--)

function findFirstAndLastValue(timeline) {
 var result = {
 "first": [],
 "last": []
 };
  first: for (var col = 0; col < timeline[0].length; col++) {
    for (var row = 0; row < 4; row++) {
      if (timeline[row][col] != '') {
         result.first = [row, col];
         break first;
      }
    }
  }
  
  last: for (var col = timeline[0].length - 1; col > 0; col--) {
    for (var row = 0; row < 4; row++) {
      if (timeline[row][col] != '') {
        result.last = [row, col];
        break last;
      }
    }
  }
  
  return result;
}

function getFirstAndLastValue() {

  var projectTl = [
    ['', '', 'A', 'A', '', ''],
    ['', 'B', 'B', '', '', ''],
    ['', '', '', '', 'C', ''],
    ['', '', 'D', 'D', '', '']
  ]

  var position = findFirstAndLastValue(projectTl);
  console.log(position);
}

getFirstAndLastValue();