我有一个函数,我在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();
答案 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()
方法并返回一个对象。
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;
答案 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();