私はjavascriptを使い慣れていて、かなり長い間研究していますが、この構文を理解することはできません。配列を別の配列にプッシュしようとすると、配列の配列を作成するのではなく、要素を個別にプッシュします。JavaScriptを初期化/追加/更新する配列の配列
lastTimes = [[1, 12435235], [2,443531923], [3,4925951], [5, 5959393]]
:
IDandTime = [5, 5959393]
が配列としてlastTimes
にIDandTime
を追加します。
lastTimes = [[1, 12435235], [2,443531923], [3,4925951]]
場合
:配列の配列としてlastTimes
:私は何をしようとしている
またはIDの場合(IDandTime[0]
)は、すでにlastTimes
以内に、そのアレイの時刻を更新し、存在している:
IDandTime = [1, 50305240]
更新ID 1の時間ならば50305240へ:
lastTimes = [[1, 50305240], [2,443531923], [3,4925951], [5, 5959393]]
誰もがここで私を助けてください気にしませんか?私はシンタックスの多くの組み合わせを試してきましたが、それを正しく得ることはできませんし、既存の答えを見つけるために適切な検索語を見つけ出すことにも成功していません。どんな提案も大歓迎です。
EDIT:
コード:
var lastTimes = [];
var IDandTime = [1, 5935935];
lastTimes.push(IDandTime);
結果:
lastTimes = [1, 5935935]
私が望む結果:
lastTimes = [[1, 5935935]]
EDIT2:
ここでは、私が使用している機能がすべてあります。私は、XBeeシリアルモジュールを備えたnode.jsサーバと、XBeeシリアルモジュールを備えたいくつかのArduino温度センサを持っています。私はハンドシェイクの仕組みを働かせていますが、ノードがドロップアウトしたときのエラーチェックを達成しようとしています。そのため、失効したデータはもはや使用されません。私はこれが実際には基本的な2次元配列構文の問題であるように感じます。適切な構文を見つけることで私の最後の試みから
// Open a new serial port connection
sp.on("open", function (err) {
if (err) {
return console.log('Error opening port: ', err.message);
}
console.log('open');
var nodeCount = 0;
var nodes = []; // get rid of after debugging
var lastTimes = [];
lastTimes[0] = [0,0]; // initalize as 2D array for later
// Grab data from buffer
sp.on('data', function(data) {
// Initialize time Object
var time = new Date();
// Split incoming data by newline
var buffer0 = data.split('\n');
// New node handshake initiation received
if (buffer0 == "BROADCASTING") {
nodeCount++;
var sendID = nodeCount.toString();
sp.write(sendID);
console.log("Broadcast received. Sending identifier #" + sendID);
nodes.push(nodeCount);
}
// Preconnected node data received
if ((buffer0 != "BROADCASTING") && (nodeCount > 0)) {
var receiveTime = time.getTime();
// [ID, Temp] touple
var nodeData = buffer0[0].split(" ");
console.log("NodeID: " + nodeData[0] + " Temp(F): " + nodeData[1]);
// [ID, Time] touple
var IDandTime = [];
IDandTime.push(nodeData[0]);
IDandTime.push(time.getTime());
console.log("IDandTime: " + IDandTime);
// Check for preexisting node ID
var oldNode = 0;
var nodeIndex = 0;
for (var i = 0; i < lastTimes.length; i++) {
if (lastTimes[i][0] == IDandTime[0]) {
oldNode = 1;
nodeIndex = i;
}
}
// If new node, add new node data to lastTimes (list of [ID, Time] touples)
if (oldNode == 0) {
lastTimes[lastTimes.length] = IDandTime;
console.log("lastTimes: " + lastTimes);
}
// If preexisting node, update preexisting node time
else if (oldNode == 1) {
lastTimes[i][1] = IDandTime[1];
}
}
});
});
エラー:
lastTimes[i][1] = IDandTime[1];
^
TypeError: Cannot set property '1' of undefined
を欲しいです。 – vlaz
ES6 [MAP](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map)をここで使用してください。たとえそれを行う方法としてちょうど参照。 – Xotic750
実際の問題を難読化すると思っていたので、無関係な部分が混在しているので(コードを投稿していませんでした。ほとんどの場合、 'lasttime = [1,59395]'の結果ではなく、 'IDandTime = [1、59395]'と 'lastTimes.push(IDandTime)'の組み合わせを試してみました。 lastTimes = [1、59395] ' – Austin