#javascript #arrays #d3.js #search
#javascript #массивы #d3.js #Поиск
Вопрос:
У меня есть структура вложенного массива, которая выглядит следующим образом. Давайте назовем это arr:
Самый внутренний массив имеет пару ключ-значение. Но, как видно, значения только от 3-7. Мне нужно заполнить этот самый внутренний массив значениями 0-9 в ключевом столбце и заполнить их равными 0, если ключ еще не существует. Я попытался создать отдельный массив (целевой) со значениями [0,9] для проверки, но безуспешно. Я пытался сделать что-то подобное, но получаю сообщение об ошибке:
var target = [0,1,2,3,4,5,6,7,8,9];
for(let i =0; i < target.length; i ){
for(let j =0; j < arr.length; j ){
for(let k =0; k < arr[j].values.length; k ){
if (miss_rate_arr[i] in rating_count[j].values[k].key === false){
rating_count[j].values.push({key:miss_rate_arr[i], value:0});
}
}
}
}
console.log(rating_count);
Это не только проверка этого конкретного значения в этом местоположении 0, и я понимаю проблему. Я просто не уверен, как это исправить. Я ожидаю, что конечный результат будет выглядеть примерно так, как показано ниже. Заранее благодарю
Комментарии:
1. Откуда берется этот массив? Вы создаете это в другой части своего собственного кода? Если это так, вы должны создать его в форме, с которой хотите начать.
2. На самом деле я закончил манипулирование массивом. Это упростило работу
Ответ №1:
Я не совсем уверен, к чему вы стремитесь, если вы придерживаетесь более общего подхода и хотите сохранить целевой массив, это больше похоже на то, что вы опубликовали, и вам нужно будет отсортировать его впоследствии, чтобы получить массив в том порядке, в котором вы разместили..
let target = [0,1,2,3,4,5,6,7,8,9];
for(let i = 0; i < target.length; i ){
if (arr.filter(x => x.key == target[i]).length == 0){
arr.push({key:target[i], value:0});
}
}
arr.sort((a,b) => a.key - b.key);
Но если target всегда 0-9, вы можете пропустить целевой массив и просто выполнить цикл от 0 до максимального ключа, к которому вы стремитесь.
таким образом, проверка значения становится более простой (вы можете просто проверить, соответствует ли ключ индексу), и поскольку вам нужно добавить его по правильному индексу, вы сохраняете его отсортированным..
let maxKey = 9;
for(let i = 0; i <= maxKey; i ){
if (arr.length > i amp;amp; arr[i].key != i || arr.length == i){
arr.splice(i, 0, {key: i, value:0});
}
}