私はJavascriptの初心者であり、ループで生成されたJavaScriptオブジェクトを分析して、1つのパラメーターを保持し、ループで生成されたすべてのオブジェクトに対してこのパラメーターを保存する必要があります。
これは私のプログラムです
var onvif = require('onvif');
var fs = require('fs');
var nombrecamera=0;
var taille=0;
var test ='';
function sleep (time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
var STREAM = fs.createWriteStream('STREAM.txt',{flags:'r+'});
onvif.Discovery.on('device', function(cam,rinfo,xml){
// function will be called as soon as NVT responses
nombrecamera+=1;
console.log(cam);
test += cam;
cam2= JSON.stringify({cam}, null , ' ');
//console.log(cam2);
STREAM.write(cam2);
console.log(test);
});
onvif.Discovery.probe({timeout:1000,resolve:false});
そして、私の例の出力では、これらのうちの4つがあります。
{ probeMatches:
{ probeMatch:
{ endpointReference: [Object],
types: 'tdn:NetworkVideoTransmitter',
scopes: ' onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/location/country/china onvif://www.onvif.org/type/network_video_transmitter onvif://www.onvif.org/hardware/IPC-122 onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/name/IPC-BO',
XAddrs: 'http://192.168.1.81:10004/onvif/device_service',
metadataVersion: 1
}
}
}
そして、生成されたすべてのオブジェクトのXAddrsのみを保持し、これらをjsonに配置したいと思います。
私の最初のアイデアは、このオブジェクトを文字列化してから書き込み可能なストリームを作成し、すべてのjsonをまとめることでしたが、この場合、json間にコマがないため、データ全体で大きなjsonは作成されません。
ご協力ありがとうございました
ジュール
アドレスの数を知る最も簡単な方法.length
は、配列の関数です。
一意のアドレスを持つリストが必要か、同じアドレスが複数回表示されるかわからないので、両方の解決策を紹介します。
一意のアドレスのみ
function extract() {
test.forEach(cam => {
const deviceAddress = cam.probeMatches.probeMatch.XAddrs;
// only if the xaddrs is not in list yet, add it
if(test.filter(xad => xad === deviceAddress).length <= 0) {
xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
}
});
// show the number of addresses
const listCount = xaddrs.length;
console.log('listCount: ', listCount);
}
一意のアドレスはありません
function extract() {
test.forEach(cam => {
xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
});
// show the number of addresses
const listCount = xaddrs.length;
console.log('listCount: ', listCount);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加