[英]Transforming an array in javascript
我是javascript的新手,我正在努力尋找答案。
我有一個帶有網絡接口和詳細信息列表的對象。 我想這是一個對象數組?:
> console.log(net);
[ { Interface: 'wlan0:',
bytes: { Receive: '26087318', Transmit: '8475' },
packets: { Receive: '379665', Transmit: '52' },
errs: { Receive: '0', Transmit: '0' },
drop: { Receive: '0', Transmit: '0' },
fifo: { Receive: '0', Transmit: '0' },
frame: { Receive: '0' },
compressed: { Receive: '0', Transmit: '0' },
multicast: { Receive: '0' },
colls: { Transmit: '0' },
carrier: { Transmit: '0' } },
{ Interface: 'lo:',
bytes: { Receive: '228483', Transmit: '228483' },
packets: { Receive: '4046', Transmit: '4046' },
errs: { Receive: '0', Transmit: '0' },
drop: { Receive: '0', Transmit: '0' },
fifo: { Receive: '0', Transmit: '0' },
frame: { Receive: '0' },
compressed: { Receive: '0', Transmit: '0' },
multicast: { Receive: '0' },
colls: { Transmit: '0' },
carrier: { Transmit: '0' } },
{ Interface: 'mon0:',
bytes: { Receive: '285735889', Transmit: '0' },
packets: { Receive: '1753373', Transmit: '0' },
errs: { Receive: '0', Transmit: '0' },
drop: { Receive: '1765559', Transmit: '0' },
fifo: { Receive: '0', Transmit: '0' },
frame: { Receive: '0' },
compressed: { Receive: '0', Transmit: '0' },
multicast: { Receive: '0' },
colls: { Transmit: '0' },
carrier: { Transmit: '0' } },
{ Interface: 'eth0:',
bytes: { Receive: '6982603', Transmit: '22526425' },
packets: { Receive: '58906', Transmit: '384822' },
errs: { Receive: '0', Transmit: '0' },
drop: { Receive: '0', Transmit: '0' },
fifo: { Receive: '0', Transmit: '0' },
frame: { Receive: '0' },
compressed: { Receive: '0', Transmit: '0' },
multicast: { Receive: '0' },
colls: { Transmit: '0' },
carrier: { Transmit: '0' } } ]
我想轉換成這個結果:
> console.log(result);
{ lo: 'lo',
mon0: 'mon0',
eth0: 'eth0',
wlan0: 'wlan0' }
我已經在節點REPL控制台中嘗試了一些東西,但我沒有得到任何地方:
> var result = {};
undefined
> Object.keys(net).forEach(function(ifname) {
... result[ifname] = ifname;
... });
undefined
> result
{ '0': '0', '1': '1', '2': '2', '3': '3' }
另一個嘗試:
> procfs.net(function(err,net){
... result = net.map(function(a) {return a.Interface;})
... });
undefined
> console.log(result);
[ 'wlan0:', 'lo:', 'mon0:', 'eth0:' ]
undefined
我可以單獨引用所需的數據元素,只是努力將它們放在一起:
> net[0].Interface
'wlan0:'
> net[1].Interface
'lo:'
> net[2].Interface
'mon0:'
> net[3].Interface
'eth0:'
幫助贊賞!
您需要從Interface
屬性中獲取值,並將此值分配給對象中的相同鍵。
var net = [{ Interface: 'wlan0:', bytes: { Receive: '26087318', Transmit: '8475' }, packets: { Receive: '379665', Transmit: '52' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '0', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }, { Interface: 'lo:', bytes: { Receive: '228483', Transmit: '228483' }, packets: { Receive: '4046', Transmit: '4046' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '0', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }, { Interface: 'mon0:', bytes: { Receive: '285735889', Transmit: '0' }, packets: { Receive: '1753373', Transmit: '0' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '1765559', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }, { Interface: 'eth0:', bytes: { Receive: '6982603', Transmit: '22526425' }, packets: { Receive: '58906', Transmit: '384822' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '0', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }], result = {}; net.forEach(function (o) { result[o.Interface] = o.Interface; }); console.log(result);
這是使用Array.reduce()的完美示例!
net.reduce((interfaces, interface) => {
interfaces[interface.Interface.slice(0, -1)] = interface.Interface.slice(0, -1)
return interfaces
}, {})
const net = [{ Interface: 'wlan0:', bytes: { Receive: '26087318', Transmit: '8475' }, packets: { Receive: '379665', Transmit: '52' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '0', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }, { Interface: 'lo:', bytes: { Receive: '228483', Transmit: '228483' }, packets: { Receive: '4046', Transmit: '4046' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '0', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }, { Interface: 'mon0:', bytes: { Receive: '285735889', Transmit: '0' }, packets: { Receive: '1753373', Transmit: '0' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '1765559', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }, { Interface: 'eth0:', bytes: { Receive: '6982603', Transmit: '22526425' }, packets: { Receive: '58906', Transmit: '384822' }, errs: { Receive: '0', Transmit: '0' }, drop: { Receive: '0', Transmit: '0' }, fifo: { Receive: '0', Transmit: '0' }, frame: { Receive: '0' }, compressed: { Receive: '0', Transmit: '0' }, multicast: { Receive: '0' }, colls: { Transmit: '0' }, carrier: { Transmit: '0' } }] const result = net.reduce((interfaces, interface) => { interfaces[interface.Interface.slice(0, -1)] = interface.Interface.slice(0, -1) return interfaces }, {}) console.log(result)
編輯:添加代碼以刪除尾部冒號字符,以完全匹配請求的輸出格式
只需減少它:
var result = net.reduce((ifaces,i) => {
var name = i.Interface.replace(/:$/,'');
ifaces[name]=name;
return ifaces;
},{})
樣本輸出
>>result
{ wlan0: "wlan0", lo: "lo", mon0: "mon0", eth0: "eth0" }
或者,您可以使用Lodash( https://lodash.com/ ):
_.keyBy(net.map(i=>i.Interface.slice(0,-1)))
或其他一些實用程序庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.