【问题标题】:How to update Json object value dynamically in jquery?如何在 jquery 中动态更新 Json 对象值?
【发布时间】:2017-07-26 05:56:45
【问题描述】:
var jsonObj = [
     {
       "key1": "value1",
       "key2": "value2", 
       "key3​": "value3" 
     }, 
     {
       "key1": "value1", 
       "key2": "value2",
       "key3​": "value3" 
     }
    ];

我想更新所有对象的所有值。这里的键和值是动态的,而不是 key1 和 value1。你能帮忙弄清楚要求吗?

我想让每个对象的每个值都变成“changedvalue”。所以更新jsonObj后的最终结果是

[
     {
       "key1": "changedvalue",
       "key2": "changedvalue", 
       "key3​": "changedvalue" 
     }, 
     {
       "key1": "changedvalue", 
       "key2": "changedvalue",
       "key3​": "changedvalue" 
     }
];

【问题讨论】:

  • 那么您希望结果看起来如何确切?你想改变什么?
  • 我投票结束这个问题,因为这个问题没有任何努力的迹象。问题陈述不完整且不清楚。
  • 感谢@weedoze 提供了一个解决方案,对于鼓励像我这样的笨蛋真的很感激。是的,错过了我需要的结果是我的错,这没有任何意义,因为我想修改值,那么结果是什么。我会按照前辈的建议来维护它。

标签: javascript jquery json


【解决方案1】:

jsonObj 是一个数组,因此您首先必须迭代这个数组

jsonObj.forEach(o => {...});

o 现在是一个对象。你必须迭代它的键/值

for(let k in o)

k 是对象中的一个键。您现在可以更改值

o[k] = 'WhateverYouNeed'

var jsonObj = [{
       "key1": "value1",
       "key2": "value2", 
       "key3": "value3" 
     }, 
     {
       "key1": "value1", 
       "key2": "value2",
       "key3": "value3" 
}];

jsonObj.forEach(o => {
  for(let k in o)
    o[k] = 'ChangedValue'
});

console.log(jsonObj);

参考资料:

如上所述,您的结构是对象数组而不是 JSON:Javascript object Vs JSON

现在把你的问题分解成几个部分,你需要

  1. 更新对象的属性:How to set a Javascript object values dynamically?
  2. 但您需要全部更新:How do I loop through or enumerate a JavaScript object?
  3. 但是这些对象在一个数组中:Loop through an array in JavaScript
  4. 但是为什么我有不同的机制来循环对象和数组呢? for 无法获取密钥,但我们可以在数组上使用 for..in。正确的? ,你不应该。 Why is using "for...in" with array iteration a bad idea?

自述文件链接:

请参考以下链接并检查浏览器兼容性,因为该解决方案不适用于旧版浏览器。还有其他循环方式,在上面的链接中突出显示。在使用它们之前,还要参考它们的兼容性。

【讨论】:

  • 通常我会要求添加解释,但考虑到问题的模糊性,我认为我们应该尝试解释基础知识。
  • 我会回答的,但那将是内容的重复,因为您的代码正是我要做的。所以我用参考链接和一些解释更新了你的答案
  • 感谢您提供解决方案,我不确定在使用“jsonObj.forEach”作为语法错误时是否做错了(在 IE 11 中)。但我用通常的 for 循环实现了它。
  • @Sandeepsandy 请检查答案中提到的所有链接,因为它们旨在教您。另外,我在问题下的评论意味着,您应该尝试一些事情并在您的问题中分享一些努力(code/algo/ref links)。部分问题将获得反对票和接近票,并且不会吸引好的答案(有时)。
  • 但是在这里我从你和@weedoze 那里得到了很好的答案,再次感谢分享有价值的知识。我一定会在以后的帖子中保留您的建议。
【解决方案2】:

这里有一个解决方案https://jsfiddle.net/Lha8xk34/

var jsonObj = [{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}, {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}];

$.each(jsonObj, function(i) {
  $.each(jsonObj[i], function(key) {
    jsonObj[i][key] = "changed" + key;
  });
});

console.log(jsonObj);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

  • 只是一个指针,你不需要$.each。检查@Weedoze 的答案
【解决方案3】:

您可能想混合使用forEachObject.keys

const jsonObj = [
  {
    "key1": "value1",
    "key2": "value2", 
    "key3​": "value3" 
  }, 
  {
    "key1": "value1", 
    "key2": "value2",
    "key3​": "value3" 
  }
];

jsonObj.forEach( obj => {
  Object.keys( obj ).forEach( key => {
    const value = obj[ key ];

    console.log( key, value );
  } );
} );

【讨论】:

  • 您应该在提交之前测试您的代码。它显示一个错误
  • 感谢您的检查 ;)
【解决方案4】:

试试pinch

在你的情况下:

var jsonObj = [
     {
       "key1": "value1",
       "key2": "value2", 
       "key3​": "value3" 
     }, 
     {
       "key1": "value1", 
       "key2": "value2",
       "key3​": "value3" 
     }
    ];

pinch(data, "/key1/", function(path, key, value) {
  return (value === "value1") ? "updatedValue" : value;
});   

【讨论】:

  • "这里的键和值是动态的,而不是 key1 和 value1"
  • @Phil 即使它是动态的,没有循环或使用一般更新,它也会更新 json 中的所有整体,根据我的理解,这不是一个好方法,他想更新基于 json 数组中的所有值在动态键上(应该知道)。
  • 为什么要为这么简单的需求使用外部库?
猜你喜欢
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
相关资源
最近更新 更多