簡體   English   中英

javascript將多維數組值添加到新數組

[英]javascript add multidimensional array values to new array

我有一個像多維數組

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的參數_.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/

使用香草避免內部負離子的簡單方法:

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

function sum(a,b){return a+b;}
function pluck(a){return a[this];}


arr.map(function(a,b,c){
   return c.map(pluck,b).reduce(sum);
}); // == [3, 6, 6]

下划線/破折號相同:

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

function sum(a,b){return a+b;}

_.map(arr, function(a,b,c){
  return _.reduce(_.pluck(c, b), sum);
}); // == [3, 6, 6]

就個人而言,我喜歡Array方法的本機鏈接,因此我不必保持平衡,但是無論哪種方法都有效。

與使用一個大程序相比,使用不同的低級可互換零件更好,這樣您就可以減少,重復使用和回收擊鍵,因為您發現自己以后需要再次做幾乎相同的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM