拥有像这样的二维数组
anArray = [[1, 2, 3], [null, 4, null, null], [1, 0, null, 5, null]];
我的目标是得到一个包含每个子数组的最后一个元素的新数组,但也是非空的。在这种情况下:[3, 4, 5]
获取我使用的每个元素的最后一个元素:
anArray.map(a => a.slice(-1)[0]);
- 它获取每个子数组的最后一个元素。
要获取数组的最后一个非null元素,可以使用它:
_.findLast([1, null, 2, null], (el) => el !==null);
它适用于一个简单的数组,但我不知道如何将它用于二维数组。有什么想法吗?
答案 0 :(得分:1)
您可以结合使用Array#map
,Array#filter
和Array#slice
:
.map()
将通过您的初始数组
.filter()
会过滤掉子数组中的null
值
.slice()
将从每个已过滤的子数组中选择最后一个元素
var anArray = [[1, 2, 3], [null, 4, null, null], [1, 0, null, 5, null]];
var res = anArray.map(o => o.filter(n => n != null).slice(-1)[0]);
console.log(res);
答案 1 :(得分:1)
使用map
和reduceRight
(基于this)
var anArray = [[1, 2, 3], [null, 4, null, null], [1, 0, null, 5, null]];
anArray.map( arr => arr.reduceRight( (a,c) => ( c != null && a == null ? c : a) , null))
答案 2 :(得分:1)
您可以使用concat
扩展语法,然后使用map
和filter
方法移除null
。
const anArray = [[1, 2, 3], [null, 4, null, null], [1, 0, null, 5, null]];
const result = [].concat(...anArray.map(e => e.filter(Boolean).slice(-1)))
console.log(result)
答案 3 :(得分:0)
除了_.findLast
:
Array#map
anArray.map(a => _.findLast(a, el => el !== null));
工作示例:
let anArray = [
[1, 2, 3],
[null, 4, null, null],
[1, 0, null, 5, null]
];
let result = anArray.map(a => _.findLast(a, el => el !== null));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
答案 4 :(得分:0)
您可以尝试这样:
注意: while
因为,大多数循环机制会遍历所有值。为了在第一场比赛中打破,并减少迭代次数,我更喜欢这个。
var anArray = [ [1, 2, 3], [null, 4, null, null], [1, 0, null, 5, null] ];
var result = anArray.map((subArray) => {
var i = subArray.length - 1;
while (i > 0) {
if (subArray[i] !== null) {
return subArray[i];
}
i--;
}
})
console.log(result)
&#13;
答案 5 :(得分:0)
var anArray = [[1, 2, 3], [null, 4, null, null], [1, 0, null, 5, null]];
var anArray = anArray.map(function(arr){
return findLastTruthyElement(arr);
});
console.log(anArray);
function findLastTruthyElement(arr){
if(!Array.isArray(arr)){
throw 'passed element is not array';
return undefined;
}
arr = arr.filter(function(item){
if(item) return true;
else return false;
});
return arr[arr.length-1];
}
答案 6 :(得分:0)
您可以弹出最后一个元素进行映射。
var array = [[1, 2, 3], [null, 4, null, null], [1, 0, null, 5, null]];
result = array.map(o => o.filter(n => n != null).pop());
console.log(result);