javascript 将多维数组值添加到新数组

标签 javascript lodash

我有一个像

这样的多维数组
var arr = [[1,2,3],[1,3,2],[1,1,1]];

我想将每列的矩阵列添加到一个新数组中。我期望的结果是[3,6,6]。这是我想出的解决方案

function compute(arr) {
    var X = _.reduce(arr, function(acc, j) {
        acc += j[0];
        return acc;
    },0);
    var Y = _.reduce(arr, function(acc, k) {
        acc += k[1];
        return acc;
    },0);
    var Z = _.reduce(arr, function(acc, l) {
        acc += l[2];
        return acc;
    },0);
    return [X,Y,Z];
}

它正在工作,但似乎有 3 个reduce 函数是多余的。我正在寻找使用 lodash 的更干净、更实用、更快的解决方案。

我在想也许我可以使用 _.flatten 函数,因为你可以为每次迭代传递一个函数,但我似乎无法避免所有循环。有什么建议吗?

最佳答案

您可以在函数内声明一个函数来处理索引和数组:

function compute(arr) {

    var reduce = function (index) {
        return _.reduce(arr, function(acc, array) {
            acc += array[index];
            return acc;
        },0);
    }

    var X = reduce(0);
    var Y = reduce(1);
    var Z = reduce(2);

    return [X,Y,Z];
};

如果你想让它短一点,你也可以这样:

function compute(arr) {
    var reduce = function (index) {
        return _.reduce(arr, function(acc, array) {
            acc += array[index];
            return acc;
        },0);
    }

    return [reduce(0), reduce(1), reduce(2)];
};

如果你想让它更短,你也可以这样做。这个函数更实用一些,因为您将函数作为参数传递给 _.map

function compute(arr) {
    var reduce = function (index) {
        return _.reduce(arr, function(acc, array) {
            acc += array[index];
            return acc;
        },0);
    }
    return _.map([0, 1, 2], reduce);
};

您可以在此处查看结果:http://jsfiddle.net/thejsj/p33hmc8q/

关于javascript 将多维数组值添加到新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25478404/

相关文章:

javascript - 网页在本地运行但在 GitHub 和 CodePen 上失败

javascript - Lodash 过滤嵌套对象

javascript - 如何在javascript中比较两个对象数组并更新值?

javascript - 我们可以将纯 Bootstrap 与 React.js 一起使用吗?

带有分号和空格的 JavaScript 正则表达式

javascript - onexit - 请求一个 url

嵌套属性上的 lodash orderBy

javascript - Lodash _.template 渲染转义字符

javascript - 如何使用 lodash 从现有的对象数组生成新的对象数组

javascript - Firebase 错误 : Uncaught TypeError: ref. once is not a function