У меня есть 2 javascript-запроса, которые возвращают результаты в массив объектов.Объединить объекты в 2 разных массивах javascript
Первый объект выглядит следующим образом:
[Object {user_id="6", meta_value="5", user_nicename="richbai90", more...},
Object {user_id="7", meta_value="1", user_nicename="testing123", more...}]
2-го выглядит следующим образом
[Object { usr="6", score="1/1", quiz_id="1"},
Object { usr="7", score="1/1", quiz_id="1"},
Object { usr="7", score="1/5", quiz_id="3"}]
массив 2 является детали массива один
Что мне нужно, это способ связать они вместе в javascript, чтобы я мог поместить информацию из объекта 2 в документ, где он должен соответствовать информации из одного объекта. Самый простой способ, который я мог бы подумать, - объединить массивы, в которых идентификаторы пользователей были одинаковыми, но это кажется более сложным, чем я сначала подумал. Здесь был мой первоначальный подход:
$.post(AjaxRequest.ajaxurl, {
action: "get_data"
})
.done(function (json) {
console.log(json);
var data = json;
for (var i = 0; i < json.length; i++) {
if (AjaxRequest.user_ID == json[i].user_id && json[i].Quizes == "1") {
$("#result_list").append("you have taken " + json[i].Quizes + " quiz");
} else if (AjaxRequest.user_id == json[i].user_id && json[i].Quizes != "1") {
$("#result_list").append("you have taken " + json[i].Quizes + " quizzes");
} else {
$("#result_list").append(json[i].user_nicename + " has taken " + json[i].Quizes + " quizzes" + "<br>");
}
}
getDetails(json);
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ', ' + error;
console.log('1st Request Failed: ' + err);
});
function getDetails(data) {
$.post(AjaxRequest.ajaxurl, {
action: "get_details"
})
.done(function (details) {
console.log(data);
console.log(details);
for (var i = 0; i < data.length; i++) {
for (var i2 = 0; i2 < details.length; i++) {
while (details[i2].usr == data[i].user_id) {
console.log(details[i2]);
break;
}
}
}
$("#loading").fadeOut('fast', function() {
$("#result_list").fadeIn('fast');
});
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ', ' + error;
console.log('2nd Request Failed: ' + err);
});
}
В этом коде блока, где работа происходит
for (var i = 0; i < data.length; i++) {
for (var i2 = 0; i2 < details.length; i++) {
while (details[i2].usr == data[i].user_id) {
console.log(details[i2]);
break;
}
}
}
Вопрос заключается в том, что после того, как цикл в то время как ломает это, кажется, не перейти к следующему itteration цикла for, как я ожидал бы, вместо этого данные [i] становятся неопределенными. Если я удалю перерыв; то данные [i] всегда == детали [i2] и, таким образом, сбой браузера.
Возможно, я делаю это сложнее, чем нужно?
Я не уверен, правильно ли понимаю ваш вопрос, но почему бы вам просто не использовать двумерный массив? – cruxi
Я думаю, я мог бы просто объединить массивы в php, прежде чем я когда-либо отправлю результат, и это будет намного проще. Извините за то, что вы сделали это сложнее, но это должно быть, но если вы опубликуете ответ, я добавлю +1 за то, что помогли мне – richbai90