簡體   English   中英

nodejs我如何使用多維數組並在其中推送值?

[英]nodejs how can i use multidimensional array and push values in it?

我試圖根據我從第三部分API獲取的數據創建一個新的multidimensional array

"output":[
  {
     "is_indb":false,
     "name":"adam",
     "tokens":29
  },
  {
     "is_indb":true,
     "name":"aaron",
     "tokens":2,
  },
  {
     "is_indb":false,
     "name":"adam",
     "tokens":3,
  },
  {
     "is_indb":false,
     "name":"axel",
     "tokens":5,
  },
  {
     "is_indb":false,
     "name":"andy",
     "tokens":5,
  },
  {
     "is_indb":false,
     "name":"bob",
     "tokens":5,
  },
  {
     "is_indb":false,
     "name":"aldo",
     "tokens":5,
  },
  {
     "is_indb":false,
     "name":"julia",
     "tokens":5,
  }
]

我想創建一個新的array ,並用響應中的數據填充它。 但我想做一些預先檢查

只接受那些is_indb = false的對象,只接受其名稱以a開頭a

所以最終數組將是所有那些is_indb = true且名稱以a開頭a

var newaray = [[adam,29],[adam,3],[axel,5],[andy,5],[aldo,5]];

到目前為止,我已經嘗試使用_pluck並獲得一些奇怪的輸出。 我能夠使用_pluck獲取_pluck的元素,但無法獲取多個項目。

我可以想到這樣的邏輯

var newaray = [];

if( (_pluck(msg.output,'is_indb') == false  && ((_pluck(msg.output,'name').substring(0, 1) == "a")){
    newaray.push( [ _.pluck(msg.output, 'name') , _.pluck(msg.output, 'token')] );
}

使用filtermap

var filteredOutput = output
    .filter(function(elem) {
        // The return statement should return true,
        // if you want the element to pass into the new array.
        return elem.is_indb === false && typeof elem.name === "string" && elem.name.indexOf('a') === 0;
    })
    .map(function(elem) {
        return [elem.name, elem.tokens];
    });

或使用ES6:

let filteredOutput = output
    .filter(elem => elem.is_indb === false && typeof elem.name === "string" && elem.name.indexOf('a') === 0)
    .map(elem => [elem.name, elem.tokens])

使用ES6並使用正則表達式(受Peter Grainger的回答啟發,但不區分大小寫):

let filteredOutput = output
        .filter(elem => elem.is_indb === false && /^a/i.test(elem.name))
        .map(elem => [elem.name, elem.tokens])

順便說一句,您發布的是對象數組,而不是多維數組,而多維數組是數組數組。

您可以先使用過濾器,再使用地圖?

 const output = [ { "is_indb":false, "name":"adam", "tokens":29 }, { "is_indb":true, "name":"aaron", "tokens":2, }, { "is_indb":false, "name":"adam", "tokens":3, }, { "is_indb":false, "name":"axel", "tokens":5, }, { "is_indb":false, "name":"andy", "tokens":5, }, { "is_indb":false, "name":"bob", "tokens":5, }, { "is_indb":false, "name":"aldo", "tokens":5, }, { "is_indb":false, "name":"julia", "tokens":5, } ] const transform = output.filter(value => /^a/.test(value.name) && !value.is_indb) .map(value => [value.name, value.tokens]) console.log(transform) 

您可以使用_.filter並以這種形式獲取輸出

op = [{ obj1 } ,{obj2}];

但是當您也想刪除一些鍵時,您可以使用_.pick

var op = _.filter(ip , function(obj){
    if(obj.is_indb == false && obj.name[0] == 'a'){
        return true;
    }
    else{
        return false;
    }
})
//so now you have all the entries filtered out
var opAltered = _.pick(op,['name','tokens']);

//you will get this result

/*
    opAltered = [
        {
            name : <something>,
            tokens : <something>
        },{
            ...
        }
    ]
*/

或者,如果您想要數組,可以使用此

opAltered = _.map(op,['name','tokens'];

我使用了更多的代碼來使您正確理解,一旦理解,可以減少代碼。

暫無
暫無

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

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