Javascript 如何循环json.stringify以使其自身更新?
我在使用json.stringify时遇到问题。我有一个点击按钮,带有一个函数,可以将另一个对象添加到保存数组的变量中Javascript 如何循环json.stringify以使其自身更新?,javascript,json,Javascript,Json,我在使用json.stringify时遇到问题。我有一个点击按钮,带有一个函数,可以将另一个对象添加到保存数组的变量中 var example = [{name: "K", age: 12},{name: "L", age: 12}]; var jsonE = JSON.stringify(example); 每当我向示例中添加另一个对象时,jsonE的值不会改变 有没有一种方法可以不断更新json,因为一旦您将一个对象放入数组中,并将“示例”字符串化,它就无法更新自身?是否有我应该使用的循环
var example = [{name: "K", age: 12},{name: "L", age: 12}];
var jsonE = JSON.stringify(example);
每当我向示例中添加另一个对象时,jsonE的值不会改变
有没有一种方法可以不断更新json,因为一旦您将一个对象放入数组中,并将“示例”字符串化,它就无法更新自身?是否有我应该使用的循环
解决方案:
当单击按钮被调用时,生成JSON.stringify。您只需使用JSON.parse将对象取回,并向其中添加新对象,然后再次将其字符串化即可
var example = [{name: "K", age: 12},{name: "L", age: 12}];
var jsonE = JSON.stringify(example);
// get objects
var exampleParsed = JSON.parse(jsonE);
// add new object to var
exampleParsed.push({name: "M", age: 13});
// stringify new var
JSON.stringify(exampleParsed);
// output
"[{"name":"K","age":12},{"name":"L","age":12},{"name":"M","age":13}]"
看看这是否适用于您(y)。您可以简单地使用JSON.parse将对象取回,并向其中添加新对象,然后再次将其字符串化
var example = [{name: "K", age: 12},{name: "L", age: 12}];
var jsonE = JSON.stringify(example);
// get objects
var exampleParsed = JSON.parse(jsonE);
// add new object to var
exampleParsed.push({name: "M", age: 13});
// stringify new var
JSON.stringify(exampleParsed);
// output
"[{"name":"K","age":12},{"name":"L","age":12},{"name":"M","age":13}]"
查看这是否适用于您(y)。将阵列与操作解耦的一个好方法是将阵列建模为 要做到这一点,您可以将数组封装为可观察的,然后让JSON.stringify依赖项注册回调
function ObservableArray() {
var self = this;
this.onPushCbs = [];
this.array = []
this.push = function(value) {
this.array.push(value)
this.onPushCbs.forEach(function(cb) {
cb(self.array);
})
}
}
var arr = new ObservableArray()
// ObservableArray {onPushCbs: Array[0], array: Array[0]}
// register event so every time that array is pushed to the value will
// be logged
arr.onPushCbs = [function(a) { console.log(a)}]
arr.push('1')
// logs ['1']
将阵列与依赖于它的操作解耦的一个好方法是将阵列建模为 要做到这一点,您可以将数组封装为可观察的,然后让JSON.stringify依赖项注册回调
function ObservableArray() {
var self = this;
this.onPushCbs = [];
this.array = []
this.push = function(value) {
this.array.push(value)
this.onPushCbs.forEach(function(cb) {
cb(self.array);
})
}
}
var arr = new ObservableArray()
// ObservableArray {onPushCbs: Array[0], array: Array[0]}
// register event so every time that array is pushed to the value will
// be logged
arr.onPushCbs = [function(a) { console.log(a)}]
arr.push('1')
// logs ['1']
为什么不在将所有对象添加到数组后调用JSON.stringify()方法呢?“有没有一种方法可以不断更新JSON,因为一旦将对象放入数组中…”我当然希望没有。那将是一个混乱的局面。您可以创建一个自定义对象来手动管理此行为,但我不知道您为什么要不断更新JSON,而不是在实际需要时更新它。@眯着眼睛看,我现在正在制作购物车,所以当用户想要向购物车添加项目时,数组通过我创建的addItem()函数进行自我更新,我需要更新JSON.stringify,以便将数组传递给php并存储到会话中。@User9123这是一个XY问题。您不需要更新JSON,因为在将JSON发送到服务器之前,您不需要它。save时Stringify就是这样。observates是一种经常使用的模式,这样您就可以解耦操作,并在某些操作发生时收到通知。我发布了一个最简单的示例,其中有很多内容,因为它是dom事件工作原理的基础。为什么不在将所有对象添加到数组中后调用JSON.stringify()方法呢?“有没有一种方法可以不断更新JSON,因为一旦将对象放入数组中…”我当然希望没有。那将是一个混乱的局面。您可以创建一个自定义对象来手动管理此行为,但我不知道您为什么要不断更新JSON,而不是在实际需要时更新它。@眯着眼睛看,我现在正在制作购物车,所以当用户想要向购物车添加项目时,数组通过我创建的addItem()函数进行自我更新,我需要更新JSON.stringify,以便将数组传递给php并存储到会话中。@User9123这是一个XY问题。您不需要更新JSON,因为在将JSON发送到服务器之前,您不需要它。save时Stringify就是这样。observates是一种经常使用的模式,这样您就可以解耦操作,并在某些操作发生时收到通知。我发布了一个最简单的示例,很多关于这方面的内容,因为它是dom事件如何工作的主干,这将只是第一次工作,但谢谢:D@User9123只在第一次工作吗?你的意思是,如果你在更新的var中推送新对象,它将不起作用?这将只在第一次起作用,但谢谢:D@User9123只在第一次工作吗?你的意思是,如果你在更新的var中推送新对象,它就不工作了?