首页 > 解决方案 > 找到匹配项时循环遍历 JSON 对象并更新值的正确方法是什么

问题描述

我能够遍历我的 JSON 对象值并找到我正在寻找的字符串,但我不确定在修改后如何设置新值。我可能采用了错误的方法,但可以使用一些反馈来说明它是如何工作的以及应该采用什么合适的方法。

this.specVars = {

  rgba_000000 : "rgba(0, 0, 0, 1)", //Black
  rgba_222222 : "rgba(34, 34, 34, 1)", //Dark gray
  rgba_2ba6cb : "rgba(43, 166, 203, 1)",
  rgba_336699 : "rgba(51, 102, 153, 1)", //Blue hyperlink
  rgba_ffffff : "rgba(255, 255, 255, 1)", //White

};

// 测试正在使用的浏览器,并在使用 firefox 时从颜色值中删除 alpha(opacity) 值

// 将对象中的值转换为数组,用于解析每个值

var colors = this.specVars;

var values = Object.values(colors);

for (var value of values){

  if(value.includes(', 1)')){

    value = value.replace(', 1)', ')');

    value = value.replace('rgba', 'rgb');

    //How do i set the value in the actual object?? 

    console.log(value);

  };

}

标签: javascriptarraysjson

解决方案


您可以像这样简单地更改任何索引处的值

this.specVars['rgba_000000'] = 10;

在你的情况下

this.specVars = {

  rgba_000000 : "rgba(0, 0, 0, 1)", //Black
  rgba_222222 : "rgba(34, 34, 34, 1)", //Dark gray
  rgba_2ba6cb : "rgba(43, 166, 203, 1)",
  rgba_336699 : "rgba(51, 102, 153, 1)", //Blue hyperlink
  rgba_ffffff : "rgba(255, 255, 255, 1)", //White

};

var colors = this.specVars;

var values = Object.values(colors);

for (var value of values){
    if(value.includes(', 34')){
      values[values.indexOf(value)] = 10;
  }
}


console.log(values);

或者

var keys = Object.keys(colors);
var values = Object.values(colors);

for (var value of values){
    if(value.includes(', 34')){
      this.specVars[keys[values.indexOf(value)]] = 10;
  }
}

推荐阅读