javascript - 使用 lodash 从嵌套数组形式的开始和结束中删除元素

标签 javascript arrays lodash

例如,我有一个嵌套数组

var arr = [
    [0,1,2,3,4],
    [0,1,2,3],
    [0,1,2,3,4],
    [0,1]
];

如何使用lodash从末尾或从开头删除N个项目?

例如,如果我从开头删除 6 个元素,我希望结果为:

var arr = [
    [1,2,3],
    [0,1,2,3,4],
    [0,1]
];

如果我从末尾删除 1,我需要的结果是:

var arr = [
    [0,1,2,3,4],
    [0,1,2,3],
    [0,1,2,3,4],
    [0]
];

我希望我说清楚了。洛达什不是必需的。

这是我的代码:

function removeFromTop(group, count) {
    for (var i = 0; i < group.length; i++) {
        for (var x = 0; x < group[i].chatItems.length; x++) {
            if(count) {
                group[i].chatItems.splice(x, 1);
                if(!group[i].chatItems.length) {
                    group.splice(i, 1);
                };
                count--;
            } else {
                break;
            }
        };
    };
    return group;
}
function removeFromBottom(group, count) {
    for (var i = group.length - 1; i >= 0; i--) {
        for (var x = group[i].chatItems.length - 1; x >= 0; x--) {
            if(count) {
                group[i].chatItems.splice(x, 1);
                if(!group[i].chatItems.length) {
                    group.splice(i, 1);
                };
                count--;
            } else {
                break;
            }
        };
    };
    return group;
}

最佳答案

您可以从开头移动每个项目计数的内部数组,并从末尾弹出值。首先,您可以使用 Array#reduce对于其他Array#reduceRight

function removeFromStart(array, n) {
    var copy = JSON.parse(JSON.stringify(array));
    return copy.reduce(function (r, a) {
        while (n && a.length) {
            a.shift();
            n--;
        }
        a.length && r.push(a);
        return r;
    }, []);
}

function removeFromEnd(array, n) {
    var copy = JSON.parse(JSON.stringify(array));
    return copy.reduceRight(function (r, a) {
        while (n && a.length) {
            a.pop();
            n--;
        }
        a.length && r.push(a);
        return r;
    }, []).reverse();
}

var array = [[0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1]];

console.log(JSON.stringify(removeFromStart(array, 6)));
console.log(JSON.stringify(removeFromEnd(array, 6)));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用 lodash 从嵌套数组形式的开始和结束中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44576153/

相关文章:

javascript - AngularJS $routeProvider 模板未显示在 ng-view 中

javascript - 来自具有通用或经典分析功能的站点的数据可以发送到同一酒店吗?

javascript - 一次显示多个数据点: Highcharts

javascript - 在 JavaScript 中,为什么 [ ] 优于 new Array();?

java - 如何随机分配数组的所有元素?

javascript - 将具有数组属性的对象展平为一个数组的最佳方法

javascript - 错误类型错误 : Cannot read property 'db' of undefined

javascript - 在 JavaScript 中查找对象数组中数组元素的索引?

javascript - 比较两个对象并仅获取更新

javascript - 在 HTML 中显示变量的最佳做法是什么?