[英]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')] );
}
使用filter
和map
:
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.