У меня есть набор данных 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
й индекс из 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>
Я думаю, вам нужно сначала установить все значения массива в ноль, используя 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);
$(".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;
}
}