将JSON数据集的其余值更新为特定值?

时间:2018-10-28 14:46:32

标签: javascript json

我有一个如下的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]
        }

3 个答案:

答案 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);

答案 1 :(得分: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>

答案 2 :(得分: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;
    }
}