Я новичок в javascript и довольно давно изучаю, но не могу понять этот синтаксис. Когда я пытаюсь нажать массив в другой массив, он подталкивает элементы индивидуально, а не создает массив массивов, как я хочу.JavaScript-инициализация/добавление/обновление массива массивов
То, что я пытаюсь сделать:
lastTimes
как массив массивов:
lastTimes = [[1, 12435235], [2,443531923], [3,4925951]]
если: IDandTime = [5, 5959393]
Append IDandTime
в lastTimes
как массив:
lastTimes = [[1, 12435235], [2,443531923], [3,4925951], [5, 5959393]]
или если 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:
Хорошо, вот полная функция, с которой я работаю. У меня есть сервер node.js с последовательным модулем XBee и несколькими датчиками температуры Arduino с последовательными модулями XBee. У меня есть механизм рукопожатия, но я пытаюсь добиться проверки ошибок, когда выпадают узлы, поэтому их устаревшие данные больше не используются. Я чувствую, что это действительно просто проблема с базовым синтаксисом 2D-массива.
// 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
Я не размещал код, потому что у него так много смешных частей, которые смешиваются (используя node.js в качестве сервера для беспроводных модулей), что я думал, что это будет запутывать актуальную проблему, о которой, как я думаю, я прояснил в своем сообщении. По большей части я пробовал много комбинаций 'IDandTime = [1, 59395]' then 'lastTimes.push (IDandTime)', который вместо того, чтобы приводить к 'lastTimes = [[1,59395]]', приводит к ' lastTimes = [1, 59395] ' – Austin