Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何循环json.stringify以使其自身更新?_Javascript_Json - Fatal编程技术网

Javascript 如何循环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,因为一旦您将一个对象放入数组中,并将“示例”字符串化,它就无法更新自身?是否有我应该使用的循环

我在使用json.stringify时遇到问题。我有一个点击按钮,带有一个函数,可以将另一个对象添加到保存数组的变量中

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中推送新对象,它就不工作了?