首页 > 解决方案 > 如果行的所有元素都不是值(NaN,null,未定义),如何删除数组数组中的行?

问题描述

如果该行的每个元素都不是值,请告诉我如何删除 2D 数组中的整行(如果 NaN 则删除,如果 null 则删除,如果未定义则删除等等......)。如果该行的至少一个元素是数字、字符串、布尔值或任何有意义的值,则将该行的每个元素保留在其位置。

例如,在这个数组中:

var array = [];

array[0] = [];
array[1] = [];
array[2] = [];

array[0][1] = "title";
array[0][2] = NaN;
array[0][3] = 3;

array[1][0] = 0;
array[1][1] = undefined;
array[1][2] = null;
array[1][3] = 3;

array[2][0] = "title";
array[2][1] = 1;
array[2][2] = undefined;
array[2][3] = "url";

console.log(array);

删除数组[0][2]、数组[1][2]、数组[2][2]。预期结果是:

[[未定义,“标题”,3],[0,未定义,3],[“标题”,1,“url”]]

标签: javascriptarrays

解决方案


您可以先获取列,然后拼接数组。

var array = [
        [, "title", NaN, 3],
        [0, undefined, null, 3],
        ["title", 1, undefined, "url"]
    ],
    indices = array
        .reduce((r, a) => {
            a.forEach((v, i) => r[i] = r[i] || !isNaN(v) && v !== null);
            return r;
        }, [])
        .reduceRight((r, v, i) => (v || r.push(i), r), []);

array.forEach(a => indices.forEach(i => a.splice(i, 1)));

console.log(indices);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读