Заполнение вложенных массивов парами ключ-значение

#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});
    } 
}