Обновить остальные значения набора данных JSON до определенного значения?

1

У меня есть набор данных JSON, как показано ниже:

data: {
        datasets: [{
                data: [2, 4, 5, 7, 8]
            }]
        }

Из ввода #dim я пытаюсь обновить определенное значение этого набора, а также изменить остальные значения на 0. Например, если значение #dim равно 2, тогда набор данных будет обновлен до [0, 5, 0, 0, 0].

Я использую следующий код для изменения одного значения из ввода. Но как я могу обновить остальные из них до 0?

$(".button").click(function() {
            var dim = $('#dim').val();

            data.datasets[2].data['' + dim + ''] = 5; //If dim value is 2, it makes data: [2, 5, 5, 7, 8]

            //I need some code here that'll change the rest of the values to 0. That is [0, 5, 0, 0, 0]
        }
  • 0
    Спасибо, и да, это была опечатка. @brk
Теги:

3 ответа

1
Лучший ответ

Вам нужен 0 й индекс из data.datasets вместо data.datasets[2]. Если тип ввода - это text он даст вам строку, поэтому используйте parseInt для преобразования этого числа в число. Также индекс массива начинается с 0. Поэтому, если вы хотите изменить второй элемент в массиве, вам нужно настроить таргетинг на элемент, который находится в индексе 1.

let data = {
  datasets: [{
    data: [2, 4, 5, 7, 8]
  }]
}
$(".button").click(function() {
  var dim = parseInt($('#dim').val(), 10) - 1;
  //setting all other value to 0
  data.datasets[0].data.forEach(function(item, index) {
    data.datasets[0].data[index] = 0
  })
  data.datasets[0].data['' + dim + ''] = 5;
  console.log(data)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='dim'>
<button type='button' class='button'>Click</button>
  • 0
    Спасибо за отличное объяснение. Приветствия.
1

Я думаю, вам нужно сначала установить все значения массива в ноль, используя new Array(5).fill(0) а затем применить код для обновления второго элемента.

Чтобы установить все значения в ноль, попробуйте,

const js_obj = {
    data: {
      datasets: [{
        data: [2, 4, 5, 7, 8]
      }]
    }
  }  
let dim = 1; // as you're grabbing dim value from the button click
js_obj.data.datasets[0].data = new Array(5).fill(0)
js_obj.data.datasets[0].data[dim] = 5;
console.log(js_obj);
0
$(".button").click(function() {
    var dim = $('#dim').val();
    if(dim) {
        for(var i=0;i<data.datasets[2].length;i++)
            data.datasets[2].data[i] = 0;
        data.datasets[2].data[dim - 1] = 5;
    }
}
  • 0
    Можете ли вы дать некоторые пояснения к вашему коду?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню